替代为过滤器

use*_*432 0 javascript

如果找到状态,我正在映射.功能似乎工作正常,但有更短的方式或替代方式?

例如:

data = {
  Items: [
    {Id: 434, Status: "Processing"},
    {Id: 223, Status: "Completed"}
  ]
}

mapperData = {
  Id: 223, 
  Name: "Hello World",
  Status: data.Items.filter(function(item) {
      if (item.Id == 223) {
        return item.Status
      }
  })[0].Status,
}

console.log(mapperData)
Run Code Online (Sandbox Code Playgroud)

回:

{Id:223,姓名:"Hello World",状态:"已完成"}

演示:https://jsfiddle.net/jgsr65pv/3/

T.J*_*der 6

而不是filter[0],使用find:

Status: data.Items.find(function(item) { return item.Id == 223; }).Status
Run Code Online (Sandbox Code Playgroud)

例如:

mapperData = {
  Id: 223, 
  Name: "Hello World",
  Status: data.Items.find(function(item) { return item.Id == 223; }).Status,
}
Run Code Online (Sandbox Code Playgroud)

使用ES2015 +箭头功能更好:

mapperData = {
  Id: 223, 
  Name: "Hello World",
  Status: data.Items.find(item => item.Id == 223).Status,
}
Run Code Online (Sandbox Code Playgroud)

find 在ES2015中添加了,但可以很容易地填充IE11等过时环境.