Как отфильтровать объект JavaScript по значениям? - PullRequest
0 голосов
/ 01 сентября 2018

У меня есть такой нормализованный объект (например):

const raw = {
  1: { foo: 1, bar: 1, flag: 0 },
  4: { foo: 4, bar: 4, flag: 1 },
  11: { foo: 11, bar: 11, flag: 0 },
  ...
}

Я хочу удалить значения, которые имеют flag: 1.

{
  1: { foo: 1, bar: 1, flag: 0 },
  11: { foo: 11, bar: 11, flag: 0 },
  ...
}

Как я могу сделать это неизменно?

Ответы [ 3 ]

0 голосов
/ 01 сентября 2018

Вы можете фильтровать объекты по lodashjs. https://lodash.com/docs/#filter

_.filter(obj, o => !o.flag);
0 голосов
/ 01 сентября 2018

Вы можете использовать Object.keys() и .reduce() методы:

let data = {
  1: { foo: 1, bar: 1, flag: 0 },
  2: { foo: 2, bar: 2, flag: 1 },
  3: { foo: 3, bar: 3, flag: 0 }
};

let result = Object.keys(data).reduce((a, c) => {
  if(data[c].flag !== 1)
    a[c] = Object.assign({}, data[c]);
  
  return a;
}, {});

console.log(result);
.as-console-wrapper { max-height: 100% !important; top: 0; }
0 голосов
/ 01 сентября 2018

Вы можете использовать Object.values() и Array.prototype.filter()

var obj = {
  1: { foo: 1, bar: 1, flag: 0 },
  2: { foo: 2, bar: 2, flag: 1 },
  3: { foo: 3, bar: 3, flag: 0 }
}
var newobj = Object.assign({}, Object.values(obj).filter(o => o.flag != 1));
console.log(newobj);

Вы можете использовать reduce(), чтобы сохранить ключи:

var obj = {
  1: { foo: 1, bar: 1, flag: 0 },
  2: { foo: 2, bar: 2, flag: 1 },
  3: { foo: 3, bar: 3, flag: 0 }
}
var newobj = Object.keys(obj).reduce((a,c) => {
  if(obj[c].flag != 1) 
   a[c] = obj[c]; return a;
},{});
console.log(newobj);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...