【问题标题】:ES6 implementation of this function?这个功能的ES6实现?
【发布时间】:2016-12-07 19:38:29
【问题描述】:

此函数循环遍历对象数组,并将对象作为第二个参数。

如果firstname 值匹配,它将遍历对象数组,用作为第二个参数传入的对象替换它。

我确信使用 ES6 扩展运算符实现此功能有更好的方法,但我在实现它时遇到了麻烦。

const foo = (arr, obj) => {
  const tempArray = arr.map((item, i) => {
    if ( arr[i].name === obj.name ) {
      return obj
    } else {
      return arr[i]
    }
  })
  return tempArray
}

const arrOfObjx = [ 
  {
      "name": "Joe",
      "favMovie": "Rambo"
  },
  {
      "name": "Jane",
      "favMovie": "The Matrix"
  },
  {
      "name": "John",
      "favMovie": "Star Wars"
  } 
]

const newJoe = {
  "name": "Joe",
  "favMovie": "ROCKY"
}

console.log(foo(arrOfObjx, newJoe ))

【问题讨论】:

    标签: javascript arrays loops object ecmascript-6


    【解决方案1】:

    尝试使用项目

    const tempArray = arr.map((item, i) => {
       if (item.name === obj.name) {
          return obj
       } else {
          return item
       }
    })
    

    我觉得你甚至可以写成

    const tempArray = arr.map((item, i) => {
       return (item.name === obj.name ? obj : item)
    })
    

    【讨论】:

      【解决方案2】:

      不,这里没有展开运算符的用例。要做的简化是删除tempArray 变量并使用item 而不是arr[i]

      function foo(arr, obj) {
        return arr.map((item, i) => {
          if ( item.name === obj.name ) {
            return obj
          } else {
            return item
          }
        });
      }
      

      你可以进一步缩短为

      const foo = (arr, obj) =>
        arr.map(item =>
          item.name === obj.name ? obj : item
        );
      

      【讨论】:

        猜你喜欢
        • 2022-07-28
        • 2017-10-10
        • 2012-09-26
        • 1970-01-01
        • 2021-11-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多