在Javascript中同时映射和过滤数组

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (15)

我有一组对象,我想迭代产生一个新的过滤数组。而且,我需要根据参数过滤掉新数组中的一些对象。我正在尝试这个:

function renderOptions(options) {
    return options.map(function (option) {
        if (!option.assigned) {
            return (someNewObject);
        }
    });   
}

这是一个好方法吗?有更好的方法吗?我愿意使用任何库,如lodash。

提问于
用户回答回答于

你应该用Array.reduce这个。

var options = [
  { name: 'One', assigned: true }, 
  { name: 'Two', assigned: false }, 
  { name: 'Three', assigned: true }, 
];

var reduced = options.reduce(function(filtered, option) {
  if (option.assigned) {
     var someNewValue = { name: option.name, newProperty: 'Foo' }
     filtered.push(someNewValue);
  }
  return filtered;
}, []);

document.getElementById('output').innerHTML = JSON.stringify(reduced);
<h1>Only assigned options</h1>
<pre id="output"> </pre> 

更多信息:https//developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/Reduce

用户回答回答于

function renderOptions(options) { return options.reduce(function (res, option) { if (!option.assigned) { res.push(someNewObject); } return res; }, []); }

扫码关注云+社区