首页 > 解决方案 > 替代过滤器

问题描述

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

例如:

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)

回来:

{Id:223,名称:“Hello World”,状态:“已完成”}

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

标签: javascript

解决方案


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

Status: data.Items.find(function(item) { return item.Id == 223; }).Status

例如:

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

使用 ES2015+ 箭头函数会更好:

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

find在 ES2015 中添加,但可以很容易地为过时的环境(如 IE11)填充。


推荐阅读