У меня два JSON с разной структурой, и мне нужно удалить один из другого.
Например:
пользователи JSON:
{
0: { id: 'user134', avatar: 'user222.gif' },
1: { id: 'user043', avatar: 'user242.gif' },
2: { id: 'user093', avatar: 'user357.gif' },
3: { id: 'user193', avatar: 'user543.gif' }
}
админ JSON:
{
id: 'user093',
avatar: 'user357.gif'
}
после удаления админа из списка пользователей результат должен быть таким:
{
0: { id: 'user134', avatar: 'user222.gif' },
1: { id: 'user043', avatar: 'user242.gif' },
3: { id: 'user193', avatar: 'user543.gif' }
}
Я пробовал использовать _.pullAllBy(array, values, [iteratee=_.identity]), но у меня это не работает!
Можете ли вы сделать первый объект массивом? поскольку ключи - это просто номера индексов, это упрощает все
JSON не имеет абсолютно никакого отношения к вашему вопросу.
Во-первых, как говорили другие, это недействительный JSON. Кроме того, я считаю, что это неправильный способ определения массива объектов!
@SajadJafari Еще лучше Set, но Vue.js не поддерживает эти структуры.



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Итак, то, что вы показываете, - это просто объекты javascript, а не JSON. Но если предположить, что вы имеете в виду, вы можете сделать это:
let users = {
1: { id: 'user043', avatar: 'user242.gif' },
2: { id: 'user093', avatar: 'user357.gif' },
3: { id: 'user193', avatar: 'user543.gif' }
};
delete users['2'];
Теперь пользователи будут включать объекты в ключи 1 и 3.
Чувак! Что это? Что случилось с объектом admin? Вы только что решили удалить user["2"] ??
Вы можете сделать это так
let user = {
0: { id: 'user134', avatar: 'user222.gif' },
1: { id: 'user043', avatar: 'user242.gif' },
2: { id: 'user093', avatar: 'user357.gif' },
3: { id: 'user193', avatar: 'user543.gif' }
};
let admin = {
id: 'user093',
avatar: 'user357.gif'
};
for(key in user){
if (user[key].id === admin.id){
delete user[key];
}
}
Вы, наверное, имеете в виду литерал объекта, а не JSON. Для этого можно использовать Object.keys и уменьшать:
const data = {
0: { id: 'user134', avatar: 'user222.gif' },
1: { id: 'user043', avatar: 'user242.gif' },
2: { id: 'user093', avatar: 'user357.gif' },
3: { id: 'user193', avatar: 'user543.gif' }
};
const admin = {
id: 'user093',
avatar: 'user357.gif'
};
const result = Object.keys(data).reduce((acc, currentKey) => {
if (data[currentKey].id !== admin.id) acc[currentKey] = data[currentKey];
return acc;
}, {});
console.info(result);Во-первых, это не JSON, это просто объект JavaScript.
Если вы хотите удалить объект внутри другого объекта по его полю id, вы можете использовать такой метод for ... in.
var o = {
0: { id: 'user134', avatar: 'user222.gif' },
1: { id: 'user043', avatar: 'user242.gif' },
2: { id: 'user093', avatar: 'user357.gif' },
3: { id: 'user193', avatar: 'user543.gif' }
}
for (var baseKey in o) {
if (o[baseKey].id == "user093") {
delete o[baseKey];
console.info(o);
}
}
let user = {
{ id: 'user134', avatar: 'user222.gif' },
{ id: 'user043', avatar: 'user242.gif' },
{ id: 'user093', avatar: 'user357.gif' },
{ id: 'user193', avatar: 'user543.gif' }
};
let admin = {
id: 'user093',
avatar: 'user357.gif'
};
let new_user=user.map(u=>{
if (u.id!=admin.id){
return u;
}
});
Вы можете использовать
The Object.values() method returns an array of a given object's own enumerable property values, in the same order as that provided by a for...in loop (the difference being that a for-in loop enumerates properties in the prototype chain as well).
The forEach() method executes a provided function once for each array element.
The JavaScript delete operator removes a property from an object; if no more references to the same property are held, it is eventually released automatically.
The JSON.stringify() method converts a JavaScript value to a JSON string, optionally replacing values if a replacer function is specified or optionally including only the specified properties if a replacer array is specified.
var obj = {
0: { id: 'user134', avatar: 'user222.gif' },
1: { id: 'user043', avatar: 'user242.gif' },
2: { id: 'user093', avatar: 'user357.gif' },
3: { id: 'user193', avatar: 'user543.gif' }
}
var obj2 = {
id: 'user093',
avatar: 'user357.gif'
}
Object.values(obj).forEach(function(o,i){
if (JSON.stringify(obj2) == JSON.stringify(o))
delete obj[i];
});
console.info(obj);ИЛИ: Если вы хотите проверить по индивидуальному ключу
var obj = {
0: { id: 'user134', avatar: 'user222.gif' },
1: { id: 'user043', avatar: 'user242.gif' },
2: { id: 'user093', avatar: 'user357.gif' },
3: { id: 'user193', avatar: 'user543.gif' }
}
var obj2 = {
id: 'user093',
avatar: 'user357.gif'
}
Object.values(obj).forEach(function(o,i){
if (obj2.id == o.id && obj2.avatar == o.avatar)
delete obj[i];
});
console.info(obj)let mainObject = {
0: { id: 'user134', avatar: 'user222.gif' },
1: { id: 'user043', avatar: 'user242.gif' },
2: { id: 'user093', avatar: 'user357.gif' },
3: { id: 'user193', avatar: 'user543.gif' }
}
let filterObject = {
id: 'user093',
avatar: 'user357.gif'
}
Object.values(mainObject).forEach(({id, avatar},index)=> {
if (id === filterObject.id) delete mainObject[index];
})
console.info(mainObject)
Это недопустимый JSON.