我有一个对象数组,我想对其进行迭代以生成一个新的过滤数组。而且,我需要根据参数从新数组中过滤掉一些对象。我正在尝试这个:
function renderOptions(options) { return options.map(function (option) { if (!option.assigned) { return (someNewObject); } }); }
这是一个好方法吗?有没有更好的方法?我愿意使用任何库,例如 lodash。
你应该使用Array.reduce这个。
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; }, []);