javascript - 当对象唯一时将其推送到数组

标签 javascript jquery angularjs

我四处寻找解决这个问题的方法,但没有运气。仅当该对象是唯一的时,我才尝试将对象推送到数组。

我们有一个数据列表(实际数据要大得多),我们循环遍历并仅获取所需的数据(对于下拉框)。使用这个,我们可以将我们想要的新数据推送到数组中...问题是所有对象都被推送,即使其中两个是相同的(用户名“Chris”对象)。该警报应返回 3 个对象,因为正在插入的 2 个对象是相同的(只应插入一个)。

到目前为止的代码:

var list = [{
    ID: 1,
    name: "Chris",
    phone: "111",
    cusID: 1
}, {
    ID: 2,
    name: "Alex",
    phone: "222",
    cusID: 2
}, {
    ID: 3,
    name: "Jim",
    phone: "333",
    cusID: 3
}, {
    ID: 4,
    name: "Chris",
    phone: "111",
    cusID: 1
}];

var filterList = [];
$.each(list, function (i, item) {
    var newUser = {
        name: item.name,
        cusID: item.cusID
    };

    if ($.inArray(newUser, filterList) == -1) {
        filterList.push(newUser);
    }
});
alert(filterList);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

关于如何解决这个问题有什么想法吗?

JSFiddle Demo

注意: 如果这有帮助的话,我也在使用 AngularJS。

最佳答案

基于Object comparison in JavaScript 尝试这样的事情:

$.each(list, function (i, item) {
    var newUser = {
        name: item.name,
        cusID: item.cusID
    };
    var jsonFL = $.map(filterList, function(v,i) {
        return JSON.stringify(v);
    });
    jsonFL.indexOf( JSON.stringify(newUser) ) > -1 || filterList.push(newUser);
});
console.log(filterList);

var list = [{
    ID: 1,
    name: "Chris",
    phone: "111",
    cusID: 1
}, {
    ID: 2,
    name: "Alex",
    phone: "222",
    cusID: 2
}, {
    ID: 3,
    name: "Jim",
    phone: "333",
    cusID: 3
}, {
    ID: 4,
    name: "Chris",
    phone: "111",
    cusID: 1
}];

var filterList = [];
$.each(list, function (i, item) {
  var newUser = {
    name: item.name,
    cusID: item.cusID
  };
  var jsonFL = $.map(filterList, function(v,i) {
    return JSON.stringify(v);
  });
  jsonFL.indexOf(JSON.stringify(newUser)) > -1 || filterList.push(newUser);
});
console.log(filterList);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

关于javascript - 当对象唯一时将其推送到数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32742504/

相关文章:

javascript - 为什么我的 JavaScript 没有打印到我的 HTML 中?

javascript - 测试嵌套 JavaScript 对象键是否存在

javascript - 过滤方法的可变过滤标准

javascript - 将在文本字段中输入的值传输到另一个 angularJs

javascript - 使用 AngularJS 组织子应用程序模块

javascript - PreloadJS无法找到音频

javascript - 将输入值检索到 formData 对象中

Chrome 和 IE 上的 Javascript 打印

javascript - 如何重置对象上的 one() 函数?

javascript - 用于从递归指令生成的菜单结构的 AngularJS 多级下拉菜单