v21*_*103 9 javascript arrays object ecmascript-6
我有一个具有以下结构的对象数组:
var arr = [
{
"value": "abc",
"checked": true
},
{
"value": "xyz",
"checked": false
},
{
"value": "lmn",
"checked": true
}
];
let result = arr.filter(item => item.checked);
console.log(result);Run Code Online (Sandbox Code Playgroud)
我希望输出为:
["abc", "lmn"]
Run Code Online (Sandbox Code Playgroud)
因为那两个value都有checked: true。
我尝试根据检查的值过滤掉:
let result = arr.filter(item => item.checked);
Run Code Online (Sandbox Code Playgroud)
我正在获取具有checked设置为的属性值的对象true。
帮助将不胜感激。
使用过滤器和地图:
const arr =[{"value":"abc","checked":true},{"value":"xyz","checked":false},{"value":"lmn","checked":true}];
const result = arr.filter(res=>res.checked).map(ele=>ele.value);
console.log(result);Run Code Online (Sandbox Code Playgroud)
您可以reduce检查是否checked为真,然后push使用累加器的值-不需要2个循环:
const arr = [{"value": "abc","checked": true},{"value": "xyz","checked": false},{"value": "lmn","checked": true}]
const filtered = arr.reduce((a, o) => o.checked ? a.concat(o.value) : a, [])
console.log(filtered)Run Code Online (Sandbox Code Playgroud)
正如assoron所指出的那样,push它比快concat,因此您可以按以下方式编写该函数:
const arr = [{"value": "abc","checked": true},{"value": "xyz","checked": false},{"value": "lmn","checked": true}]
const filtered = arr.reduce((a, o) => (o.checked && a.push(o.value), a), [])
console.log(filtered)Run Code Online (Sandbox Code Playgroud)
首先,那不是有效的JS-您需要交换括号和花括号。数组使用[],而对象使用{},而不是相反。
其次,您应该首先filter根据该checked属性选出所需的对象,然后使用map提取所需的属性:
const arr =[{"value":"abc","checked":true},{"value":"xyz","checked":false},{"value":"lmn","checked":true}];
const res = arr.filter(({ checked }) => checked).map(({ value }) => value);
console.log(res);Run Code Online (Sandbox Code Playgroud)