我有一个对象数组,我想对其进行迭代以生成一个新的过滤数组。同时,我还需要根据参数从新数组中过滤出一些对象。我试着这样做:
function renderOptions(options) {
return options.map(function (option) {
if (!option.assigned) {
return (someNewObject);
}
});
}
这是个好方法吗?有没有更好的方法?我愿意使用任何库,如lodash。
使用reduce,你可以在一个数组中做到这一点。函数原型。这将从数组中获取所有偶数。
Var arr = [1,2,3,4,5,6,7,8];
Var BRR = arr。Reduce ((c, n) => {
如果(n % 2 !== 0) {
返回c;
}
c.push (n);
返回c;
},[]);
. getelementbyid(“mypre”)。innerHTML = brr.toString();
<h1>获取所有偶数</h1>
<pre id="mypre"> </pre>
您可以使用相同的方法并将其泛化到您的对象,如下所示。
var arr = options.reduce(function(c,n){
if(somecondition) {return c;}
c.push(n);
return c;
}, []);
Arr现在将包含筛选过的对象。
你应该使用Array。减少这个。
Var选项= [
{name: 'One', assigned: true},
{name: 'Two',赋值:false},
{name: 'Three',赋值:true},
];
Var减少=选项。减少(函数(筛选,选项){
If (option.assigned) {
var someenewvalue = {name: option.name, newProperty: 'Foo'}
filtered.push (someNewValue);
}
返回过滤;
},[]);
. getelementbyid(“输出”)。innerHTML = JSON.stringify(简化);
<h1>仅分配选项</h1>
<pre id="output"> </pre> .
或者,减速器可以是一个纯函数,就像这样
var reduced = options.reduce(function(result, option) {
if (option.assigned) {
return result.concat({
name: option.name,
newProperty: 'Foo'
});
}
return result;
}, []);
我用以下几点优化了答案:
重写if (cond) {stmt;}作为cond && stmt;
使用ES6箭头函数
我将给出两个解决方案,一个使用forEach,另一个使用reduce:
解决方案1:使用forEach
该解决方案通过使用forEach遍历每个元素来实现。然后,在forEach循环的主体中,我们有条件作为过滤器,它决定我们是否要向结果数组追加一些内容。
Const选项= [
{name: 'One', assigned: true},
{name: 'Two',赋值:false},
{name: 'Three',赋值:true},
];
Const reduced = [];
选项。forEach(o => {
O.assigned && reduced。push({name: o.name, newProperty: 'Foo'});
});
console.log(减少);
解决方案2:使用reduce
这个解决方案使用array. prototype.reduce而不是forEach来迭代数组。它认识到这样一个事实,即reduce具有内置的初始化式和循环机制。除此之外,该解决方案与forEach解决方案或多或少是相同的,因此,区别在于修饰语法。
Const选项= [
{name: 'One', assigned: true},
{name: 'Two',赋值:false},
{name: 'Three',赋值:true},
];
Const reduced = options。Reduce ((a, o) => {
o.assigned && a.push({name: o.name, newProperty: 'Foo'});
返回一个;
}, []);
console.log(减少);
我让你来决定采用哪种解决方案。
使用reduce,你可以在一个数组中做到这一点。函数原型。这将从数组中获取所有偶数。
Var arr = [1,2,3,4,5,6,7,8];
Var BRR = arr。Reduce ((c, n) => {
如果(n % 2 !== 0) {
返回c;
}
c.push (n);
返回c;
},[]);
. getelementbyid(“mypre”)。innerHTML = brr.toString();
<h1>获取所有偶数</h1>
<pre id="mypre"> </pre>
您可以使用相同的方法并将其泛化到您的对象,如下所示。
var arr = options.reduce(function(c,n){
if(somecondition) {return c;}
c.push(n);
return c;
}, []);
Arr现在将包含筛选过的对象。