Javascript/Lodash/Redux - 从对象返回具有特定 id 的对象

标签 javascript json reactjs redux lodash

假设我们有一个对象:

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.keyssome,但除了跳过继承的属性外,它并没有真正给你带来任何好处:

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/

相关文章:

javascript - 测试调用 API 的函数

javascript - Gatsby.js - AllMarkdownRemark 中的 GraphQL 查询 pdf 文件

javascript - 调整大小时,两个 div 相互穿过

javascript - 防止在隐藏父项并读取子项的 css 时下载背景图像

javascript - 防止 Internet Explorer 滚动焦点

json - 如何用 JSON 表示日期和/或时间信息?

javascript - 删除具有键值的嵌套数组中的对象

java - 尝试获取字符串是否有作者、标题、出版商等

javascript - 将 PHP 数组发送到 JavaScript 问题

javascript - 为什么提交表单后页面会重新加载? (React/Netlify/react-recaptcha)