【问题标题】:JS: Extracting data from an array of objectsJS:从对象数组中提取数据
【发布时间】:2021-10-27 01:35:09
【问题描述】:

我有一个包含 100 多个字段和嵌套字段的复杂查询。我想要做的是,对于每个索引,提取英文和法文文本。正如您在数组中看到的,某些索引没有法语文本。在那种情况下,我想获得英文文本。 对我来说,提取英文文本工作正常,因为文本已经存在,但如果是法语,我会收到未定义的错误。实现这一点的最佳方法是什么。这个需要 Loadash 还是只需要纯 JS 方法?

为了清楚起见,我在提取法语时出错,因为在某些字段中,法语文本不可用,在这种情况下我想使用英语值。

此外,如果我能够通过其语言字段而不是索引获取英语和法语值,则建议。我不知道该怎么做。

任何建议,文档表示赞赏。谢谢!

示例数组:

[
 {
    id: "1",
    name: [
      {
        language: "en-US",
        text: "HOLIDAY"
      }
    ],
    order: 6,
    Groups: [
      {
        name: [
          {
            language: "en-US",
            text: "REGULAR"
          }
        ],
        code: "REGEARN"
      },
      {
        name: [
          {
            language: "en-US",
            text: "CHARGE"
          }
        ],
        code: "CHARGE"
      }
    ]
  }
]

这里是重现我的错误的代码沙箱: CODE SAND BOX https://codesandbox.io/s/javascript-forked-5073j

编辑:

预期输出:

{
  key: key,
  englishtext: "Value Here",
  frenchtext: "Value Here"
}

下面是一个工作代码,但问题是当没有法语或该字段时它不起作用。我得到未定义的错误。那么我可以从语言字段中获取所需的数据吗?

x.map((y) => ({
    key: y.id,
    name: y.name[0].text,
    groupname: y.Groups ? x.Groups[0].name?.[0].text : 'N/A',
  }))

【问题讨论】:

  • 请在您的堆栈溢出问题中包含演示该问题的代码。
  • 当然我会在我离开电脑的时候做这件事 rn:)
  • 您希望输出如何?您想传递一个项目 ID 并获取英文和法文文本以及代码吗?或者你只是想要一个包含所有英语和法语文本的字符串数组(如果它们存在的话)?
  • 鉴于我们不知道您想要的输出格式或输入格式实际上是什么,因为您的代码示例失败,因为它是一个数组数组,我能说的最好的就是尝试一个函数像这样。 ``` console.log(getLanguageTexts(x[1]), "en-US") function getLanguageTexts(group, preferredLanauge) { const prefLangResults = group.name.filter(c => c.language === preferredLanauge) 返回prefLangResults.length > 0 ? prefLangResults : group.name.find(c => c.language === "en-US") }``
  • 给我们一个输出的例子。你想要代码、组、项目ID、文本吗?我有一种感觉,如果没有适当的上下文,文本是没有意义的。

标签: javascript arrays json


【解决方案1】:

你期待这样的结果吗?如果你不介意 lodash。

const _ = require('lodash');

const getNames = (arr) => {
  return arr.map((obj) => {
    const id = obj.id;
    const englishtext = _.get(obj, 'name[0].text', 'N/A');
    const frenchtext = _.get(obj, 'name[1].text', englishtext);

    return { id, englishtext, frenchtext };
  });
};
        
console.log(getNames(x));
// [
//   { id: '1', englishtext: 'HOLIDAY', frenchtext: 'HOLIDAY' },
//   { id: '2', englishtext: 'Stat Holiday', frenchtext: 'Congé Férié' },
//   { id: '3', englishtext: 'Over', frenchtext: 'Over' }
// ] 

【讨论】:

  • 这很好,谢谢! Lodash 在这种情况下真的很有帮助。
猜你喜欢
  • 2021-07-07
  • 2021-05-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-06-30
  • 2017-06-24
相关资源
最近更新 更多