我想基于对象属性创建一个没有重复对象(所有对象都是唯一的)的数组,如果它是唯一的,我想将其推送到该数组。
在将其发送到我的函数之前,我使用:
vm.initResponse = angular.fromJson(response);
将
$$hashKey
推送到每个对象。 function initDropDown(list){
console.log('initDropDown', list);
for (var key in list) {
//remove angularjs $$hashKey
var obj = JSON.parse(angular.toJson(list[key]));
//the object I want to push into new array
var filter = {};
filter.prop = obj.SUGNIA;
//if indexOf returns -1 the array does not have this object
if(vm.stockOptionsSelect.indexOf(filter) < 0){
vm.stockOptionsSelect.push(filter);
}
}
}
列表数组有许多具有不同
SUGNIA
的对象,我想创建一个包含所有唯一对象的数组。我已删除
$$hashKey
已解释remove-hashKey并使用indexOf
-indexOf。列表数据-
[
{
"uid": "23",
"time": "2017-10-01 16:00:35.515",
"SUGNIA": "stock",
"SECURITYNAME": "IBM",
"INDEX_IN_UI": 5
},
{
"uid": "29",
"SECURITYNUM": 629014,
"time": "2017-09-28 16:32:26.432",
"SUGNIA": "holdings",
"SECURITYNAME": "FaceBook",
"INDEX_IN_UI": 10
},
{
"uid": "id",
"time": "2017-09-28 16:33:20.25",
"SUGNIA": "stock",
"SECURITYNAME": "google",
"INDEX_IN_UI": 0
}
]
我的结果应该是:
[{"prop":"stock"}, {"prop":"holding"}]
但是我得到了重复。
最佳答案
indexOf函数使用严格相等性===
进行比较,由于传递给该函数的对象是刚创建的对象,因此它将始终返回-1
。
要解决此问题,可以改用...some(...)函数。
这是一个例子:
if(!vm.stockOptionsSelect.some(e => e.prop == obj.SUGNIA)){
vm.stockOptionsSelect.push({prop:obj.SUGNIA});
}
关于javascript - 根据属性创建唯一的数组,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/46527012/