如何按值过滤JavaScript对象?

Tai*_*chi 1 javascript ecmascript-6

我有这样的规范化对象(例如):

const raw = {
  1: { foo: 1, bar: 1, flag: 0 },
  4: { foo: 4, bar: 4, flag: 1 },
  11: { foo: 11, bar: 11, flag: 0 },
  ...
}
Run Code Online (Sandbox Code Playgroud)

我想删除有的值flag: 1.

{
  1: { foo: 1, bar: 1, flag: 0 },
  11: { foo: 11, bar: 11, flag: 0 },
  ...
}
Run Code Online (Sandbox Code Playgroud)

我怎么能这样做呢?

Mam*_*mun 6

你可以使用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);
Run Code Online (Sandbox Code Playgroud)

你可以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);
Run Code Online (Sandbox Code Playgroud)