假设我们有一个对象:
names:
{
0: {"id": 30, name: "Adam"},
1: {"id": 1, name: "Ben"},
2: {"id": 15, name: "John"},
...
}
并使用 lodash get 函数我想将特定名称保存到常量中。
const name = _.get(state, ['names', nameId]);
我知道这行不通,因为我选择的是对象的键而不是 id。知道如何解决吗?请注意,我不能像使用 id 作为对象的键那样规范化数据,因为它破坏了这些数据来自 BE 的顺序。是否可以遍历对象并查找特定的 id?
我正在从其他函数正确获取 nameId
最佳答案
不需要 Lodash。只需遍历对象的属性以查找 id
上的匹配项:
const names = {
0: {"id": 30, name: "Adam"},
1: {"id": 1, name: "Ben"},
2: {"id": 15, name: "John"}
};
const nameId = 1;
let obj;
for (const name in names) {
if (names[name].id == nameId) {
obj = names[name];
break;
}
}
console.log(obj);
或者使用 Object.keys
和 some
,但除了跳过继承的属性外,它并没有真正给你带来任何好处:
const names = {
0: {"id": 30, name: "Adam"},
1: {"id": 1, name: "Ben"},
2: {"id": 15, name: "John"}
};
const nameId = 1;
let obj;
Object.keys(names).some(name => {
if (names[name].id == nameId) {
obj = names[name];
return true;
}
});
console.log(obj);
或者使用 ES2017 的 Object.values
(很容易为旧环境填充 polyfill) 和 find
:
const names = {
0: {"id": 30, name: "Adam"},
1: {"id": 1, name: "Ben"},
2: {"id": 15, name: "John"}
};
const nameId = 1;
const obj = Object.values(names).find(entry => entry.id == nameId);
console.log(obj);
关于Javascript/Lodash/Redux - 从对象返回具有特定 id 的对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47012147/