2015-03-02 88 views
3

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

简化的例子:

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

例如:获取第2个属性

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

'Object.key'把它变成一个数组... – 2015-03-02 10:41:51

+0

[Object.keys](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/keys) – Hacketo 2015-03-02 10:41:55

+10

你会如何定义'第一'两个属性? Javascript对象的属性没有任何固有的顺序。 http://stackoverflow.com/questions/5525795/does-javascript-guarantee-object-property-order – 2015-03-02 10:41:57

回答

2

“全部” 的主流浏览器(在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));  
+0

我正要写这个问题。 _.omit,将完美工作 – lonewarrior556 2016-03-01 16:44:41

4

技术上对象表现得像哈希表。因此,没有固定的输入顺序,前两个输入并不总是相同的。所以,这是不可能的,尤其是没有迭代对象的条目。

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" 
 
} 
 
    */