如何将此对象数组转换为使用reduce javascript
我正在尝试将此函数转换为使用reduce。我已经完成一半了。当所选值为如何将此对象数组转换为使用reduce javascript,javascript,reduce,Javascript,Reduce,我正在尝试将此函数转换为使用reduce。我已经完成一半了。当所选值为true时,我想知道该元素的索引 let options = [ {label: 'foo1', selected: false}, {label: 'foo2', selected: true}, {label: 'foo2', selected: false}, {label: 'foo2', selected: false}, {label: 'foo2', selected: f
true
时,我想知道该元素的索引
let options = [
{label: 'foo1', selected: false},
{label: 'foo2', selected: true},
{label: 'foo2', selected: false},
{label: 'foo2', selected: false},
{label: 'foo2', selected: false},
];
const obj = options
.map((option, index) => (option.selected ? index : -1))
.filter((val) => val !== -1)[0];
结果:1
我的尝试是:
const obj = options.reduce((acc, currentValue, index) => {
const i = currentValue["selected"] ? index : -1;
return acc.concat(i)
}, []); // [-1,1,-1,-1,-1]
如何将整个内容更改为使用reduce?如果您希望使用选中的
索引
=true,则可以使用reduce
执行类似操作。如果上下文中的当前项选择了
==true,则将索引添加到累加器,否则返回累加器。当前,如果条件为false,则添加-1
let选项=[
{label:'foo1',selected:false},
{label:'foo2',selected:true},
{label:'foo2',selected:false},
{label:'foo2',selected:false},
{label:'foo2',selected:false},
];
const selectedIndex=options.reduce((r,o,i)=>o.selected?r.concat(i):r,[]))
log(selectedIndexes)
如果您希望索引中的为selected
=true,那么可以使用reduce
执行类似操作。如果上下文中的当前项选择了
==true,则将索引添加到累加器,否则返回累加器。当前,如果条件为false,则添加-1
let选项=[
{label:'foo1',selected:false},
{label:'foo2',selected:true},
{label:'foo2',selected:false},
{label:'foo2',selected:false},
{label:'foo2',selected:false},
];
const selectedIndex=options.reduce((r,o,i)=>o.selected?r.concat(i):r,[]))
console.log(selectedIndex)
仅当选项为true时才将索引添加到结果中。selected
为true,否则不执行任何操作
let选项=[
{label:'foo1',selected:false},
{label:'foo2',selected:true},
{label:'foo2',selected:false},
{label:'foo2',selected:false},
{label:'foo2',selected:false},
];
const selected=options.reduce((arr,option,index)=>{
返回选项.selected?arr.concat(索引):arr;
}, []);
console.log(选中)代码>仅当选项为true时才将索引添加到结果中。否则不执行任何操作
let选项=[
{label:'foo1',selected:false},
{label:'foo2',selected:true},
{label:'foo2',selected:false},
{label:'foo2',selected:false},
{label:'foo2',selected:false},
];
const selected=options.reduce((arr,option,index)=>{
返回选项.selected?arr.concat(索引):arr;
}, []);
console.log(选中)代码>使用和..
扩展运算符保留现有索引,并在选中时添加新索引(如果为true
)
let选项=[
{label:'foo1',selected:false},
{label:'foo2',selected:true},
{label:'foo2',selected:false},
{label:'foo2',selected:false},
{label:'foo2',selected:false},
{label:'foo2',selected:true},
{标签:'foo2',所选:1}
];
const obj=选项。减少((acc、currentValue、index)=>{
//仅检查布尔值为true,不检查真值
返回acc=currentValue[“所选”]==true?[…acc,索引]:acc;
}, []);
控制台日志(obj)代码>使用和..
扩展运算符保留现有索引,并在选中时添加新索引(如果为true
)
let选项=[
{label:'foo1',selected:false},
{label:'foo2',selected:true},
{label:'foo2',selected:false},
{label:'foo2',selected:false},
{label:'foo2',selected:false},
{label:'foo2',selected:true},
{标签:'foo2',所选:1}
];
const obj=选项。减少((acc、currentValue、index)=>{
//仅检查布尔值为true,不检查真值
返回acc=currentValue[“所选”]==true?[…acc,索引]:acc;
}, []);
控制台日志(obj)代码>在concat()
中使用三元来设置要插入的值Array#concat()
返回更新后的数组,这就是reduce()
的返回
或者使用排列返回新数组[…累加器,selsected?i:-1]
const res=options.reduce((a,{selected:s},i)=>a.concat(s?i:-1),[]);
//或
//const res=options.reduce((a,{selected:s},i)=>[;
console.log(res)
让选项=[
{label:'foo1',selected:false},
{label:'foo2',selected:true},
{label:'foo2',selected:false},
{label:'foo2',selected:false},
{label:'foo2',selected:false},
];
在concat()
中使用三元组设置要插入的值Array#concat()
返回更新后的数组,这就是reduce()
的返回
或者使用排列返回新数组[…累加器,selsected?i:-1]
const res=options.reduce((a,{selected:s},i)=>a.concat(s?i:-1),[]);
//或
//const res=options.reduce((a,{selected:s},i)=>[;
console.log(res)
让选项=[
{label:'foo1',selected:false},
{label:'foo2',selected:true},
{label:'foo2',selected:false},
{label:'foo2',selected:false},
{label:'foo2',selected:false},
];
另一种方法是使用push
而不是concat
:
let选项=[
{label:'foo1',selected:false},
{label:'foo2',selected:true},
{label:'foo2',selected:false},
{label:'foo2',selected:false},
{label:'foo2',selected:false},
];
var obj=选项。减少((acc、currentValue、index)=>{
currentValue.selected?acc.push(索引):“”;返回acc},[]);
console.log(obj)
另一种方法是使用push
而不是concat
:
let选项=[
{label:'foo1',selected:false},
{标签:“foo2”,