我四处寻找解决这个问题的方法,但没有运气。仅当该对象是唯一的时,我才尝试将对象推送到数组。
我们有一个数据列表(实际数据要大得多),我们循环遍历并仅获取所需的数据(对于下拉框)。使用这个,我们可以将我们想要的新数据推送到数组中...问题是所有对象都被推送,即使其中两个是相同的(用户名“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>
关于如何解决这个问题有什么想法吗?
注意: 如果这有帮助的话,我也在使用 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/