2016-09-21 89 views
0

我有一個彈性搜索響應($ scope.myval),其中包含100條記錄的用戶詳細信息。在這100條記錄中,我只需要一個用戶名和其他一些字段的列表,其中我知道只有5個唯一記錄。Javascript從對象創建獨特對象陣列

我想要做的是創建一個唯一的唯一對象的新數組。

var meta = []; 

function checkExists (value){ 
    for (k = 0; k < meta.length ; k++){ 
     if(meta[k].LoginName == value.LoginName){ 
      console.log("matches") 
     } 
     else{ 
      meta.push({ 
       LoginName: value.LoginName, 
      }); 
     } 
    } 
} 

for (j = 0; j <$scope.myval.length ; j++){ 
    checkExists($scope.myval[j]._source) 
} 

console.log(meta); 

但是,這看起來沒有工作,因爲元是空的。

有什麼想法?

+4

'其中(k = 0; k Nonemoticoner

+0

你已經從一個空數組。 ,並期望使用該空數組的長度來填充它。 – evolutionxbox

回答

0

我會建議編輯你的代碼,以便「CheckExists」完全做到這一點,如果它不存在,明確地添加它。

function checkExists (value){ 
    for (k = 0; k < meta.length ; k++){ 
     if(meta[k].LoginName == value.LoginName){ 
      console.log("matches") 
      valueExists = true; 
     } 
    } 
} 

if (!valueExists){ 
    meta.push({ 
     LoginName: value.LoginName, 
    }); 
} 
0

var makeArrayOfUniqueRecords = function (inputArray, fields) { 
 

 
    var uniqueArray = [], 
 
     mappedArray = inputArray.map(function (record) { 
 

 
     var newRecord = {}; 
 

 
     fields.forEach(function (propertyName) { 
 
      newRecord[propertyName] = record[propertyName]; 
 
     }); 
 

 
     return JSON.stringify(newRecord); 
 

 
     }); 
 

 
    mappedArray.forEach(function (record) { 
 
    if (uniqueArray.indexOf(record) === -1) { 
 
     uniqueArray.push(record); \t \t 
 
    } 
 
    }); 
 

 
    return uniqueArray.map(function (record) {return JSON.parse(record)}); 
 

 
} 
 

 
console.log(
 
    makeArrayOfUniqueRecords([{a: 1, b: 2, c: 0}, {a: 2, b: 1, c: 2}, {a: 1, b: 2, c: 3}, {a: 1, b: 2, c: 4}], ["a", "b"]) 
 
);

0

試試這個:

let meta = new Set(); 

for (j = 0; j < $scope.myval.length; j++){ 
    let value = $scope.myval[j]._source; 
    meta.add({LoginName: value.LoginName}); 
} 

console.log(meta); 

設置爲對象,只保留唯一的密鑰,所以你不必擔心檢查功能。此外,如果你只需要陣列可以for後多加一個循環,是這樣的:

let metaArr = []; 

for (let key in meta) metaArr.push(key);