替代为过滤器

时间:2018-04-24 12:13:53

标签: 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)

退回:

  

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

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

2 个答案:

答案 0 :(得分:6)

而不是filtervalue,请使用find

[0]

E.g:

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

使用ES2015 +箭头功能更好:

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, } ,但可以轻松填充IE11等过时环境。

答案 1 :(得分:0)

您可以选择在forEach数组上使用Items循环,并将id设置为在变量中进行比较:

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

var res = {};
var id = 223;
data.Items.forEach((item)=>{
  res.Id = id;
  res.Name =  "Hello World";
  if (item.Id == id) {
    res.Status = item.Status
  }
});


console.log(res)