【问题标题】:Find an Item in an array and add a value在数组中查找一个项目并添加一个值
【发布时间】:2019-03-01 06:23:55
【问题描述】:

我有两个数组,我想用 Arr2 键找到 Arr1 中的项目,如果找不到值应该为 0,则将 arr2 的值映射到 arr1。

const Arr1=['A','B','C']
const Arr2=[{key:'a',val:100},{key:'c',val:100}]

预期结果:

const Arr3=[{key:'a',val:100},{key:'b',val:0},{key:'c',val:100}]

【问题讨论】:

  • 好的,那么到目前为止,除了满足要求,您还做了什么?
  • 你说的是什么意思?"如果未找到值应该是0,将arr2的值映射到arr1。"
  • 请关注已编辑的

标签: javascript arrays


【解决方案1】:

您可以像这样使用 mapfind

const Arr1=['A','B','C']
const Arr2=[{key:'a',val:100},{key:'c',val:100}]

const Arr3 = Arr1.map(c => {
  const exists = Arr2.find(b => b.key === c.toLowerCase());
  return exists || { key: c.toLowerCase(), val: 0 };
})

console.log(Arr3)

或者像这样使用reduce

const Arr1=['A','B','C']
const Arr2=[{key:'a',val:100},{key:'c',val:100}]

const Arr3 = Arr1.reduce((r, a) => {
  const exists = Arr2.find(b => b.key === a.toLowerCase());
  const item = exists || { key: a.toLowerCase(), val: 0 }
  return r.concat(item)
},[])

console.log(Arr3)

【讨论】:

  • concat 创建一个新数组。
  • 这是个问题,因为..?
  • 这不是问题,这是一个很好的答案,但如果不需要每次都创建一个新数组,推送会更好吗?
  • 如果我们使用push,那么我们需要再写一行返回累加器。 r.push(item); return r。但是concat返回的是合并后的数组,可以一次性返回
  • 有没有办法让 arr3 原样使用 arr1 的内容,而不是把所有东西都放在 lowercae 中
【解决方案2】:

根据您之前的问题,您仍然可以根据需要返回一个值,并在比较之前将键转换为小写。

const Arr1=['a','b','c']
var Arr2=[{key:'a',val:100},{key:'c',val:100}]

Arr2.map(val => {
 if(Arr1.indexOf(val.key) >= 0 )
  val.val = val
 else
  val =  0
})

【讨论】:

    猜你喜欢
    • 2020-11-25
    • 1970-01-01
    • 2018-10-18
    • 2012-12-28
    • 2019-08-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多