能否对一个对象进行切片处理?

4
类似于Array slice(),是否有可能切割一个对象(而不是循环遍历它的属性)?
简化示例:
var obj = {a:"one", b:"two", c:"three", d:"four"};

例如:获取前两个属性
var newObj = {a:"one", b:"two"};

1
将“Object.key”转换为数组... - Neta Meta
Object.keys - Hacketo
10
你如何定义“前两个”属性?JavaScript对象的属性没有任何固有顺序。 - Jozef Legény
我投票关闭此问题,因为@JozefLegény的评论和已发布的答案已经正确回答了此问题。 - F. Hauri - Give Up GitHub
4个回答

4

从技术上讲,对象的行为类似于哈希表。因此,没有固定的条目顺序,并且前两个条目不是始终相同的。因此,这是不可能的,特别是不使用迭代对象的条目。


2
所有主要的浏览器(在Firefox 36、Chrome 40和Opera 27中测试)都保留了对象中键的顺序,尽管这在标准中并不是一定的,正如Jozef Legény在评论中指出的那样。
> Object.keys({a: 1, b: 2})
["a", "b"]
> Object.keys({b: 2, a: 1})
["b", "a"]

理论上,您可以使用循环来切割对象:
function objSlice(obj, lastExclusive) {
    var filteredKeys = Object.keys(obj).slice(0, lastExclusive);
    var newObj = {};
    filteredKeys.forEach(function(key){
        newObj[key] = obj[key];
    });
    return newObj;
}
var newObj = objSlice(obj, 2);

例如,使用下划线的{{link1:omit函数}}:
var newObj = _.omit(obj, Object.keys(obj).slice(2));    

1

你可以使用 var newObj = Object.entries(obj).slice(0, 1)


0

var obj = {a:"one", b:"two", c:"three", d:"four"};
    delete obj['d'];
    console.info(obj)
    
  /*
  sorry i forgot to put quote around d property name
   o/p
   [object Object] {
  a: "one",
  b: "two",
  c: "three"
}
  */


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接