当对象唯一时,将对象推入数组
Push object to array when unique
我已经四处寻找解决这个问题的方法,但没有运气。只有当对象是唯一的时候,我才尝试将对象推入数组。
我们有一个数据列表(实际的数据要大得多),我们循环遍历并只获取所需的数据(对于下拉框)。使用它,我们可以将我们想要的新数据推入数组…问题是所有的对象都被推,即使其中2个是相同的(用户名"克里斯"对象)。警报应该返回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演示/strong>
注意: 我也在使用AngularJS,如果这有帮助的话。
基于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>
前提条件:
考虑以下getUserKey
函数,这将是我们区分用户的基础:
function getUserKey (user) {
return [user.name, user.phone, user.cusID].join('_');
}
解释:我们使用键name
, phone
和cusID
来定义唯一性,虽然在你的情况下,我想键' ' cusID '是足够的。
将用户放在一个由'userkey'索引的对象中:
var users = {};
list.forEach(function (user) {
users[getUserKey(user)] = {name: user.name, cusID: user.cusID};
});
如果需要,获取用户数组。
var filterList = [];
Object.keys(users).forEach(function (key) {
filterList.push(users[key])
});
我写了'if need ',因为在angular中你可以遍历users
对象。
演示strong>
给你:
https://jsfiddle.net/u2w0by4v/11/
$.each(list, function (i, item) {
var newUser = {
name: item.name,
cusID: item.cusID
};
var zUser = newUser.name+","+newUser.cusID;
if ($.inArray(zUser, filterList) == -1) {
filterList.push(zUser);
}
});
问题是数组的结构。这是一个多维数组,所以检查不起作用。基本上,我只是将newUser对象转换为逗号分隔的字符串,并将其传递给您的filterList数组。
相关文章:
- Javascript(Angular)从一个对象数组到第二个数组查找值
- 在Javascript中转换对象数组
- 在JavaScript中通过索引从对象数组中获取值
- Backbone虹吸以获取对象数组
- 如何在DataTables 2.1中迭代对象数组
- Javascript-根据赋值顺序,按键合并对象数组
- 将事件附加到对象/数组
- jQuery$.inArray()总是返回-1和一个对象数组
- javascript处理一个对象数组以获得一个新的对象数组
- javascript在数组中获取对象数组中键的所有不同值
- 在对象数组中查找多个值的d3范围
- Undercore.js获取对象数组中键对象的值
- 在mongoose中使用正则表达式在对象数组中进行查询搜索
- 如何通过json对象数组为嵌套对象赋值
- 如何循环通过2个对象数组并通过匹配id进行合并
- 为对象数组创建列表项
- 如何使用javascript合并两个对象数组
- JSON到对象数组,并向每个对象添加项
- JavaScript:从对象数组中获取唯一值及其计数
- 按不同项目对对象数组进行排序