我有以下数组
const array = [{name:'one', value:1},{name:'two'},{name:'three', value:3}]
我想要得到的是
const finalarr = [1,3]
即获得具有键值的值数组
所以我尝试过
const finalarr = arr.map(obj=>obj.value)
以上返回[1, undefined, 3];
我也尝试过
const finalarr = arr.map(obj => {
if (obj.value) {
return obj.value;
}
})
但我仍然得到[1, undefined,3]
我该如何调整它以仅返回带有键值的对象的值以消除未定义的键?
答案 0 :(得分:1)
您可以使用reduce
const array = [{name:'one;', value:1},{name:'two'},{name:'three', value:3}]
let final = array.reduce((op,{value})=>{
if(typeof value !== 'undefined'){
op.push(value)
}
return op
},[])
console.log(final)
map用于将完整的数组与更改后的值映射回去,它不会跳过值,您可以根据需要使用map和filter
const arr = [{name:'one', value:1},{name:'two'},{name:'three', value:3}]
const finalarr = arr.filter(({value})=>typeof value !== 'undefined').map(({value})=> value)
console.log(finalarr)
答案 1 :(得分:1)
Array .map
方法将返回另一个与原始数组大小完全相同的数组。
如果您想要不同大小的结果,则不能仅使用纯.map
来做到。
您可以做的是首先.filter
去除没有.value
属性的对象:
const array = [{name:'one', value:1},{name:'two'},{name:'three', value:3}]
const result = array
.filter(obj => typeof obj.value !== 'undefined')
.map(obj => obj.value);
console.log(result);
否则,您也可以使用.reduce
:
const array = [{name:'one', value:1},{name:'two'},{name:'three', value:3}]
const result = array.reduce((arr, obj) => {
if (typeof obj.value !== 'undefined')
arr.push(obj.value);
return arr;
}, []);
console.log(result);
答案 2 :(得分:1)
使用函数reduce
是因为函数map
返回的数组长度与源数组的长度相同。
const finalarr = arr.reduce((a, {value}) => {
if (value) a.push(value);
return a;
}, []);
重要提示::您的方法是跳过值为零的0
对象。
示例
const arr = [{name:'one', value:1},{name:'two'},{name:'three', value:3}];
const finalarr = arr.reduce((a, {value}) => {
if (value) a.push(value);
return a;
}, []);
console.log(finalarr);
.as-console-wrapper { max-height: 100% !important; top: 0; }