2014-10-30 63 views
0

我有一個包含行信息的對象數組。我正在嘗試過濾這些信息,以便只有一次包含每個行值的新數組。所以下面的對象會輸出這樣的數組:['1', '2', '3']將對象數組過濾到新數組中

這是我的代碼。我想在地圖功能,但不知道這是正確的做法:

var myArray = [ 
 
    { 
 
     "row": 1, 
 
     "headline": "First Object" 
 
    }, 
 
    { 
 
     "row": 1, 
 
     "headline": "Second Object" 
 
    }, 
 
    { 
 
     "row": 2, 
 
     "headline": "Third Object" 
 
    }, 
 
    { 
 
     "row": 2, 
 
     "headline": "Fourth Object" 
 
    }, 
 
    { 
 
     "row": 3, 
 
     "headline": "Fifth Object" 
 
    } 
 
]; 
 
    
 
    var rows = myArray.map(function(row) { 
 
     console.log(row) 
 
    });

回答

1

這樣做很可能是寫所有屬性的一個對象的最簡單方法,然後把它們寫回數組:

var o = {}, 
    uniqueArray = []; 

myArray.forEach(function (d) { 
    o[d.row] = true; // stores the key equal to d.row in the object 
}); 
for (var k in o) { // loop through all the keys in o 
    if (o.hasOwnProperty(k)) // if the object o has that key 
     uniqueArray.push(k); // push it to the array 
} 
console.log(uniqueArray); 
// ["1", "2", "3"]; 
+0

謝謝!這正是我所期待的。 – Mdd 2014-10-30 02:14:33

1

把所有的行值在數組中......

var arrayAll = []; 
for (var i = 0; i < myArray.length; i++) { 
    arrayAll.push(myArray[i].row) 
} 

然後刪除重複

var uniqueNames = []; 
$.each(arrayAll, function (i, el) { 
    if ($.inArray(el, uniqueNames) === -1) uniqueNames.push(el); 
}); 

console.log(uniqueNames); 

看到這個職位的其他選項刪除重複,如果你需要一個非JQuery的選項。 Remove Duplicates from JavaScript Array

+0

你絕對不需要jQuery來解決這個問題。 – royhowie 2014-10-30 02:09:41

+0

我知道,您是否看到我添加的鏈接? – Urielzen 2014-10-30 02:11:45

+0

@Urielzen謝謝!這個鏈接真的很好! – Mdd 2014-10-30 02:16:27

1

對於更易讀的方式,則選擇答案,我會去的:

var distinct = function(rows){ 
    var mappedValues = rows.map(function(single){ 
     return single.row; 
    }); 
    return mappedValues.filter(function(item,pos){ 
     return mappedValues.indexOf(item) === pos; 
    }); 
} 

distinct(myArray); 

只是我的2美分。

+1

唯一的問題是這是'O(n^2)'。大型數據集將非常慢。 – royhowie 2014-10-30 06:17:28

+0

@royhowie因爲我和你有同樣的想法,所以我做了一個jsperf來測試它作爲本地函數,或者有時非常好的優化。即使使用更大的數據集,我的速度也會提高3倍。 http://jsperf.com/filter123 – 2014-10-30 10:38:24

+0

@royhowie對不起,我必須原諒自己,我做了我的測試用例大陣複製數組沒有考慮改變數字。您的解決方案確實是大陣列中更好的解決方案。 – 2014-10-30 11:07:44