遍历对象的对象并提取等于特定值的键值?

时间:2018-07-24 16:30:57

标签: javascript for-loop filter

我正在尝试避免诸如loaddash(_.filter)之类的依赖性,并使用纯JavaScript。

基本上我有一个对象对象,我需要遍历并过滤掉所有不具有特定值的parent_id的对象。

var filterBy = 50
var obj = {
  256: {
    name: john
    parent_id: 50
  },
  341: {
    name: dwit
    parent_id: 50
  },
  398: {
    name: ryan
    parent_id: 30
  },
  421: {
    name: jack
    parent_id: 50
  }
}

结果为

var filteredOBJ = {
  256: {
    name: john
    parent_id: 50
  },
  343: {
    name: dwit
    parent_id: 50
  },
  421: {
    name: jack
    parent_id: 50
  }
}

3 个答案:

答案 0 :(得分:2)

 const result = {};
 for(const [key, val] of Object.entries(obj)) {
    if(val.parent_id === filterBy) {
       result[key] = val;
    }
  }

只需将您描述的内容转换为代码即可。

答案 1 :(得分:1)

这是ES6中一个简单过滤器的实现:

let myObj = {
  256: {
    name: "john",
    parent_id: 50
  },
  341: {
    name: "dwit",
    parent_id: 50
  },
  398: {
    name: "ryan",
    parent_id: 30
  },
  421: {
    name: "jack",
    parent_id: 50
  }
}

let result = {};
Object.entries(myObj).forEach( ([key, value]) => {
  if(key != 398)  // condition over keys 
    result[key] = value;
})
console.log(result);

答案 2 :(得分:1)

如果您喜欢loadash方法,但想使用javascript,则.ghc/ghci_history上的reduce()将为您提供不错的功能方法,尽管上述Object.entries()解决方案可能会为您带来可读性。 / p>

forEach