小编典典

同时映射和过滤数组

all

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

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

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


阅读 139

收藏
2022-05-20

共1个答案

小编典典

你应该使用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>

或者,reducer 可以是一个纯函数,像这样

var reduced = options.reduce(function(result, option) {
  if (option.assigned) {
    return result.concat({
      name: option.name,
      newProperty: 'Foo'
    });
  }
  return result;
}, []);
2022-05-20