我有一个弹性搜索响应($ scope.myval),它包含100条用户详细信息记录。在这100条记录中,我需要一个仅包含用户名和其他一些字段的列表,其中我知道只有5条唯一记录。
我要做的是创建一个仅包含唯一对象的新数组。
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);
然而,由于meta为空,这似乎不起作用。
有什么想法吗?
答案 0 :(得分: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,
});
}
答案 1 :(得分: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);
}
});
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"])
);
答案 2 :(得分: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);
Set是仅保留唯一键的对象,因此您不必担心检查功能。此外,如果您只需要Array,则可以在for
之后添加一个循环,例如:
let metaArr = [];
for (let key in meta) metaArr.push(key);