我有两个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])
,但对我来说不起作用!
答案 0 :(得分:1)
您可以这样做
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];
}
}
答案 1 :(得分:1)
您可能是说object literal, and not JSON。您可以使用Object.keys和reduce来实现:
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.log(result);
答案 2 :(得分:1)
首先,这不是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.log(o);
}
}
答案 3 :(得分:1)
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;
}
});
答案 4 :(得分:1)
您可以使用
Object.values()方法返回给定对象自己的可枚举属性值的数组,其顺序与for ... in循环所提供的顺序相同(区别在于for-in循环枚举了in ...原型链)。
forEach()方法为每个数组元素执行一次提供的函数。
JavaScript删除运算符从对象中删除属性;如果不再保存对同一属性的引用,则该属性最终将自动释放。
JSON.stringify()方法将JavaScript值转换为JSON字符串,如果指定了replacer函数,则可以选择替换值,如果指定了replacer数组,则可以仅包括指定的属性。
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.log(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.log(obj)
答案 5 :(得分:1)
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.log(mainObject)
答案 6 :(得分:0)
好的,所以您显示的只是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处包含对象。