2015-03-02 97 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" 
 
} 
 
    */