与Array slice()类似,是否可以切片对象(不通过属性循环)?是否可以切片对象?
简化的例子:
var obj = {a:"one", b:"two", c:"three", d:"four"};
例如:获取第2个属性
var newObj = {a:"one", b:"two"};
与Array slice()类似,是否可以切片对象(不通过属性循环)?是否可以切片对象?
简化的例子:
var obj = {a:"one", b:"two", c:"three", d:"four"};
例如:获取第2个属性
var newObj = {a:"one", b:"two"};
“全部” 的主流浏览器(在Firefox 36,铬40,歌剧27测试)保持key order in objects虽然这是not a given in the standard如约瑟夫Legé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));
我正要写这个问题。 _.omit,将完美工作 – lonewarrior556 2016-03-01 16:44:41
技术上对象表现得像哈希表。因此,没有固定的输入顺序,前两个输入并不总是相同的。所以,这是不可能的,尤其是没有迭代对象的条目。
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"
}
*/
'Object.key'把它变成一个数组... – 2015-03-02 10:41:51
[Object.keys](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/keys) – Hacketo 2015-03-02 10:41:55
你会如何定义'第一'两个属性? Javascript对象的属性没有任何固有的顺序。 http://stackoverflow.com/questions/5525795/does-javascript-guarantee-object-property-order – 2015-03-02 10:41:57