Javascript:按值过滤对象并返回新对象(不是数组)

标签 javascript object ecmascript-6

我有两个带有 ID 的 JS 相关对象。我需要根据第二个对象值color过滤第一个对象。过滤器函数对我有用,但我得到一个数组,我需要一个对象。

这些对象类似如下:

"matchs": { 
  "123": { 
    id: "123",            
    array_players: [ "1","2" ],    
  },
  "345": { 
    id: "345",            
    array_players: [ "1","4" ],    
  },
  "611": { 
    id: "611",            
    array_players: [ "2","5" ],    
  }  
};

"players": {
  "1": { "id": "1", "name": "Mike", color: "green"},
  "2": { "id": "2", "name": "Andy", color: "yellow" },
  "3": { "id": "3", "name": "Tony", color: "blue"},
  "4": { "id": "4", "name": "Joe", color: "green" }
  "5": { "id": "4", "name": "Lisa", color: "red" }
}

ES6过滤器函数:

var filter = Object.values(matchs).filter(function(match){
  return (
    match.array_players.find (function(player_id){
      return (players[player_id].color === 'green')
    })
  );
});

但结果是一个数组,而不是像原始 matchs 那样的对象:

[ 
  0: { 
    id: "123",            
    array_players: [ "1","2" ],    
  },
  1: { 
    id: "345",            
    array_players: [ "1","4" ],    
  }      
];

我需要这样的东西:

"matchs": { 
  "123": { 
    id: "123",            
    array_players: [ "1","2" ],    
  },
  "345": { 
    id: "345",            
    array_players: [ "1","4" ],    
  }, 
};

最佳答案

您可以映射对象并使用 Object.assign用于将所有对象放入一个对象中。

var matchs = { 123: { id: "123", array_players: ["1", "2"] }, 345: { id: "345", array_players: ["1", "4"] }, 611: { id: "611", array_players: ["2", "5"] } },
    players = { 1: { id: "1", name: "Mike", color: "green" }, 2: { id: "2", name: "Andy", color: "yellow" }, 3: { id: "3", name: "Tony", color: "blue" }, 4: { id: "4", name: "Joe", color: "green" }, 5: { id: "4", name: "Lisa", color: "red" } },
    result = Object.assign(
        {},
        ...Object
            .keys(matchs)
            .filter(k => matchs[k].array_players.some(l => players[l].color === 'green'))
            .map(k => ({ [k]: matchs[k] }))
    );

console.log(result);
.as-console-wrapper { max-height: 100% !important; top: 0; }

关于Javascript:按值过滤对象并返回新对象(不是数组),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48213309/

相关文章:

javascript - 首选解构修复不起作用

javascript - 尝试使用 onChange 填充变量时 undefined variable

javascript - 使用 Socket.IO 发送数据的频率如何?

javascript - 使用正则表达式提取字符串的一部分

javascript - Angular 2如何将对象数组放入另一个对象数组

reactjs - React JS - 如何在对象内添加对象

javascript - 警告点击按钮的内部 HTML

javascript - react : How to get values from Material-UI TextField components

javascript - 使用 javascript 在按钮 Click 上加载和打印 PDF 的可能方法

javascript - 从数组中的对象中查找键的值 - Javascript