我有一组像
这样的对象[
{
"name": "Name 1",
"id": "1245"
},
{
"name": "Name 2",
"id": "9788"
},
{
"name": "Name 3",
"id": "5694"
},
{
"name": "Name 4",
"id": "4523"
},
{
"name": "Name 5",
"id": "4567"
}
]
我需要检查数组是否包含带ID的对象(比方说“1111”)。如果在数组内的任何对象中找不到ID,则将新对象(例如,{"name":"Test 0","id":"1111"}
)放在数组的开头。
PS:为实现目标,是否有除array.unshift(newObj)
以外的方法?
编辑:好的。我确实尝试过使用array.indexOf(),但它似乎只适用于值而不是对象。我也尝试循环遍历数组,但也没有奏效。我不能使用ES6。
答案 0 :(得分:0)
function hasId(array, id){
return array.reduce(function(sum, element){
return sum || element.id === id;
}, false);
}
if(hasId(array, 1111)){
array.splice(0, 0, newElement);
}
有1000种方法可以做到这一点。这个解决方案适用于es5,它不是太有效,因为它贯穿整个阵列。最快的方法是在for循环中执行,然后在第一次找到时返回,但这看起来更漂亮。
function hasId(array, id){
for(var i=0; i<array.length;i++){
if(array[i].id === id){
return true;
}
}
return false;
}
if(hasId(array, 1111)){
array.splice(0, 0, newElement);
}
这是最快的方法,只要找到第一个ID就会停止
答案 1 :(得分:0)
如果没有ES6并且假设您的对象名为users
,则可以有条件地添加一个如果它不存在,如下:
function addUser(name, id) {
users.forEach(function(user) {
if (user.id === id) {
return user;
}
});
var newUser = {"name": name,"id": id}
users.unshift(newUser);
return newUser;
}