我有以下数组
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]
如何将其调整为只返回具有键值的对象的值以消除未定义的键?
发布于 2019-04-25 18:18:15
使用函数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; }
发布于 2019-04-25 18:15:54
您可以使用减缩
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)
用于将整个数组映射回已更改的值的映射--它不会跳过值--您可以使用映射和筛选来实现目的
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)
发布于 2019-04-25 18:17:00
array .map
方法将返回与原始数组大小完全相同的另一个数组。
如果您想要一个大小不同的结果,您不能只使用纯.map
。
您可以做的是首先使用.filter
out对象,而不使用.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);
https://stackoverflow.com/questions/55859923
复制