Удалить JSON из другого JSON - PullRequest
       4

Удалить JSON из другого JSON

0 голосов
/ 09 октября 2018

У меня есть два 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' }
}

admin 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 голосов
/ 09 октября 2018

Вы можете использовать

Object.values()

Метод Object.values ​​() возвращает массив значений собственного перечисляемого свойства данного объекта, втот же порядок, что и в цикле for ... in (разница в том, что цикл for-in перечисляет свойства и в цепочке прототипов).

Array.prototype.forEach()

Метод forEach () выполняет предоставленную функцию один раз для каждого элемента массива.

оператор удаления

Оператор удаления JavaScript удаляет свойство из объекта;если больше ссылок на это свойство не хранится, оно в конечном итоге освобождается автоматически.

JSON.stringify ()

JSON.stringify() метод преобразует значение JavaScript в строку JSON, опционально заменяя значения, если указана функция заменителя, или опционально включая только указанные свойства, если указан массив заменителя.

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)
0 голосов
/ 09 октября 2018

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)
0 голосов
/ 09 октября 2018
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;
    }
});
0 голосов
/ 09 октября 2018

Прежде всего, это не 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);
    }
  }
0 голосов
/ 09 октября 2018

Вы, вероятно, имеете в виду литерал объекта, а не 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.log(result);
0 голосов
/ 09 октября 2018

Вы можете сделать это так

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];
    }
}
0 голосов
/ 09 октября 2018

Хорошо, так что вы показываете только объекты 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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...