来自菜鸟的简单问题。
我有这个例子,我创建一个带有键/值结构的列表,我使用Id作为键,其余内容是值,所以如果我添加更多记录,它们将被添加到我的列表 $ scope.itemList []
var data = [
{
id: 1,
name : "Peter",
lastname : "Smith",
age : 36
}, {
id: 2,
name : "Peter",
lastname : "Smith",
age : 36
}
];
$scope.itemList = [];
angular.forEach(data, function(item){
var obj = {};
var valObj = {};
valObj.name = item.name;
valObj.lastname = item.lastname;
valObj.age = item.age;
obj[item.id] = valObj;
$scope.itemList.push(obj);
});
问题是我可以在我的json中使用相同的ID创建更多记录,并且我希望避免添加重复的记录,现在这个代码将推送它所带来的一切,如果id是重复的,但我不知道如何将var obj {}与item.id进行比较,我尝试了不同的“选项”,但没有一个工作。
对此的一些帮助将会很棒,我会非常感激
答案 0 :(得分:1)
解决方案
var data = [
{
id: 1,
name : "Peter1",
lastname : "Smith",
age : 36
}, {
id: 2,
name : "Peter2",
lastname : "Smith",
age : 36
}, {
id: 2,
name : "Peter3",
lastname : "Smith",
age : 36
}
];
$scope.itemList = [];
angular.forEach(data, function(item){
var obj = {};
var valObj = {};
valObj.name = item.name;
valObj.lastname = item.lastname;
valObj.age = item.age;
if ( !obj[item.id]) {
obj[item.id] = valObj;
$scope.itemList.push(obj);
}
});
但是如果你没有一个很好的理由obj [item.id]那么你应该看看lodash的findIndex或类似的东西。
我的意思是我无法找到你必须拥有2个单独对象的原因。
<强>更新强>
var data = [
{
id: 1,
name : "Peter1",
lastname : "Smith",
age : 36
}, {
id: 2,
name : "Peter2",
lastname : "Smith",
age : 36
}, {
id: 2,
name : "Peter3",
lastname : "Smith",
age : 36
}
];
$scope.itemsList = [];
angular.forEach(data, function(item){
if(_.findIndex($scope.itemsList, function(itemList){ return item.id === itemList.id }) === -1){
$scope.itemsList.push(item);
}
});
答案 1 :(得分:1)
如果您将itemList从列表更改为字典,我认为它可以满足您的需求。类似的东西:
var data = [
{
id: 1,
name : "Peter",
lastname : "Smith",
age : 36
}, {
id: 2,
name : "Peter",
lastname : "Smith",
age : 36
}
];
$scope.itemDictionary = {};
angular.forEach(data, function(item){
var obj = {};
var valObj = {};
valObj.name = item.name;
valObj.lastname = item.lastname;
valObj.age = item.age;
obj[item.id] = valObj;
if(!$scope.itemDictionary[item.id]){
$scope.itemDictionary[item.id] = obj;
}
});