ES6实现了这个功能?

时间:2016-08-02 12:36:33

标签: javascript arrays loops object ecmascript-6

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

如果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 ))




2 个答案:

答案 0 :(得分: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
  );

答案 1 :(得分: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)
})