我想基于对象属性创建一个没有重复对象(所有对象都是唯一的)的数组,如果它是唯一的,我想将其推送到该数组。
在将其发送到我的函数之前,我使用:

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/

10-11 06:02
查看更多