如何将此对象数组转换为使用reduce javascript

如何将此对象数组转换为使用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

我正在尝试将此函数转换为使用reduce。我已经完成一半了。当所选值为
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”,