【问题标题】:Mapping array with one key and multiple values to new object with instances of same value in new object将具有一个键和多个值的数组映射到新对象中具有相同值的实例的新对象
【发布时间】:2021-01-21 08:24:52
【问题描述】:

这就是我现在所拥有的,它返回一个包含所有对象的数组,如下面的整个对象:

let unique = getFromDb().then(values => values.map(value => value))

整个对象:

0:
blob: Blob {size: 21481, type: "image/png"}
group: "2020-10-06T07:51:18.816Z"
key: "https://opencache.statkart.no/gatekeeper/gk/gk.open_gmaps?layers=topo4&zoom=19&x=270507&y=155468"
timestamp: "2020-10-6 9:51:18"
url: "https://opencache3.statkart.no/gatekeeper/gk/gk.open_gmaps?layers=topo4&zoom=19&x=270507&y=155468"
urlTemplate: "https://{s}.statkart.no/gatekeeper/gk/gk.open_gmaps?layers=topo4&zoom={z}&x={x}&y={y}"
x: 270507
y: 155468
z: 19

如何将 group 映射到所有值都具有相同组值的新数组? 例如: 0:组:'foo' 1:组:'foo' 2:组:“酒吧”

应该是:mappedArr = group[{'foo', 'foo'}, {'bar'}) 重要的是我在调用 mappedArr 时可以访问 整个对象 的属性

会这样使用:

组:foo

  • url 第一个对象
  • url 第二个对象
  • ...

组:酒吧

  • url 第一个对象

【问题讨论】:

  • 仅供参考:values.map(value => value) 等于 values
  • 我意识到,试图修复我的承诺,以便它实际返回数据而不是返回我的承诺:D
  • 嗯,这完全是另一个问题。我建议您阅读以下内容:stackoverflow.com/questions/14220321/…。对于您的问题,我在下面发布了答案
  • 是的,您的答案正是我想要的!谢谢。
  • 没问题 :-)

标签: javascript arrays mapping


【解决方案1】:

你可以像这样减少它:

const data = [{
  group: "foo",
  url: "url 1"
}, {
  group: "foo",
  url: "url 2"
},{
  group: "bar",
  url: "url 3"
},{
  group: "foo",
  url: "url 4"
}];

const groupArr = (arr) => {
  return Object.values( // get array from all the values
    arr.reduce((acc, el) => { // reduce to an object with the group as keys and the single items as value array
      if(acc[el.group] == null)
         acc[el.group] = [el];
      else
         acc[el.group].push(el);

      return acc;
    }, {})
  )
}

console.log(groupArr(data));

【讨论】:

    猜你喜欢
    • 2021-04-09
    • 1970-01-01
    • 2023-02-05
    • 2022-11-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多