与Array slice()类似,是否可以对对象进行切片(不通过其属性循环)?
简化示例:
var obj = {a:"one", b:"two", c:"three", d:"four"};
例如:获取前2个属性
var newObj = {a:"one", b:"two"};
答案 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)