【问题标题】:Create A New Array from an Existing Array [duplicate]从现有数组创建新数组 [重复]
【发布时间】:2021-03-09 20:33:38
【问题描述】:

我有一个数组,我需要遍历每个不同的元素并获取相应的详细信息。 提供数组result获取finalResultorThisFinalResult

let result = [{
    type: ['Science'],
    link: "www.educatorsector.com"
  },
  {
    type: ['Sports', 'News'],
    link: "www.skysports-news.com"
  },
  {
    type: ['Sports', 'Science'],
    link: "www.cnn-news.com"
  }];

finalResult = [
{ type : "Science", numberOfLinks : 2 }, 
{ type : "Sports", numberOfLinks : 2 },
{ type : "News", numberOfLinks : 1 }]

orThisFinalResult = [
{ type : "Science", links : ["www.educatorsector.com", "www.cnn-news.com"],
{ type : "Sports", links : ["www.skysports-news.com", "www.cnn-news.com"],
{ type : "News", links : ["www.skysports-news.com"]
 }

【问题讨论】:

  • 您之前的相同问题的答案有什么问题?
  • @nick 它被标记为已关闭,因为它需要更多详细信息,所以我对其进行了重构,该解决方案是有效的
  • 既然在问题结束之前你有两个有效的答案,为什么你需要发布另一个问题?
  • @nick 我想看看其他的想法和方法
  • 所以正确的做法是编辑您的原始问题,然后您可以投票重新打开它。发布另一个相同的问题只会导致它被关闭 - 无论是出于与原始问题相同的原因,还是作为原始问题的副本 - 并且可能导致一个或两个问题被否决,这可能导致问题被禁止。

标签: javascript arrays ecmascript-6 reduce


【解决方案1】:

let result = [
  {
    type: ['Science'],
    link: 'www.educatorsector.com'
  },
  {
    type: ['Sports', 'News'],
    link: 'www.skysports-news.com'
  },
  {
    type: ['Sports', 'Science'],
    link: 'www.cnn-news.com'
  }
];

const mapping = {};
result.forEach((item) =>
  item.type.forEach((type) =>
    mapping[type]
      ? mapping[type].push(item.link)
      : (mapping[type] = [item.link])
  )
);

const finalResult = Object.keys(mapping).map((key) => ({
  type: key,
  numberOfLinks: mapping[key].length
}));
const orThisFinalResult = Object.keys(mapping).map((key) => ({
  type: key,
  links: mapping[key]
}));

console.log(finalResult);
console.log(orThisFinalResult);

【讨论】:

    猜你喜欢
    • 2017-08-26
    • 2018-12-19
    • 2013-03-23
    • 2020-10-06
    • 2014-10-28
    • 2016-08-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多