是否可以切片对象?

时间:2015-03-02 10:40:16

标签: javascript

Array slice()类似,是否可以对对象进行切片(不通过其属性循环)?

简化示例:

var obj = {a:"one", b:"two", c:"three", d:"four"};

例如:获取前2个属性

var newObj = {a:"one", b:"two"};

4 个答案:

答案 0 :(得分:4)

技术上,对象的行为类似于哈希表。因此,没有恒定的输入顺序,前两个条目不是一直相同的。因此,这是不可能的,尤其是在没有迭代对象条目的情况下。

答案 1 :(得分:2)

“所有”主要浏览器(在Firefox 36,Chrome 40,Opera 27中测试)保留key order in objects,尽管这是not a given in the standard,正如JozefLegény在comments中所说:

> 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);

或者例如使用下划线的omit function

var newObj = _.omit(obj, Object.keys(obj).slice(2));    

答案 2 :(得分: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"
}
  */

答案 3 :(得分:0)

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