从另一个json移除json

时间:2018-10-09 14:27:21

标签: javascript arrays json vue.js vuejs2

我有两个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]),但对我来说不起作用!

7 个答案:

答案 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.keysreduce来实现:

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()

  

Object.values()方法返回给定对象自己的可枚举属性值的数组,其顺序与for ... in循环所提供的顺序相同(区别在于for-in循环枚举了in ...原型链)。

Array.prototype.forEach()

  

forEach()方法为每个数组元素执行一次提供的函数。

delete operator

  

JavaScript删除运算符从对象中删除属性;如果不再保存对同一属性的引用,则该属性最终将自动释放。

JSON.stringify()

  

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处包含对象。