【问题标题】:JavaScript: Split objects in array based on space in object propertyJavaScript:根据对象属性中的空间拆分数组中的对象
【发布时间】:2021-05-20 01:19:12
【问题描述】:

在 JavaScript 中,假设我有一个这样的数组:

[{display:"Foo"},{display:"Bar", field: {"Baz"}},{display:{"Baz Foo"}},{display: "Foo Bar", field: "Bar"}]

并希望将其转换为:

[{display:"Foo"},{display:"Bar", field: {"Baz"}},{display:{"Baz"}},{display:{"Foo"}},{display: "Foo", field: "Bar"},{display: "Bar", field: "Bar"}].

也就是说,将显示字段中包含空格的对象拆分为两个对象,并保持字段属性不变。

我觉得这应该是一些简单的解决方案,但我就是不正确。有谁知道我如何做到这一点?

【问题讨论】:

  • 您可以为此编写逻辑。 SO不是正确的平台,要求逻辑。如果您在逻辑上遇到任何问题,或者您的逻辑无法正常工作,那么您应该在这里提问。
  • @Anita 你从哪里得到这个?我真的认为寻求解决编程逻辑的帮助正是 SO 的目的,所以我有兴趣阅读其中的说明

标签: javascript arrays list object


【解决方案1】:

这行得通:

const input = [
  {display:"Foo"},
  {display:"Bar", field: "Baz"},
  {display:"Baz Foo"},
  {display:"Foo Bar", field: "Bar"}
]

const output = input.map((entry) =>
  entry.display.split(/\s+/g).
    map((part) => ({...entry, display: part}))
).flat()

console.log(output)

请注意,split(/\s+/g) 在一个或多个空格处拆分,例如"hello world" 导致 ["hello", "world"]。如果不想这样,改成split(" "),结果就是["hello", "", "", "", "world"]

【讨论】:

    【解决方案2】:

    试试这个

    const arr = [{display:"Foo"},{display:"Bar", field: "Baz"},{display:"Baz Foo"},{display: "Foo Bar", field: "Bar"}]
    
    const newArr = arr.reduce((acc, cur) => {
      const { field, display } = cur
      const newObjs = display.split(" ").map(dis => ({ display: dis, field }));
      acc = acc.concat(newObjs)
      return acc
    }, [])
    

    【讨论】:

      猜你喜欢
      • 2022-01-18
      • 2015-03-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-05-05
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多