Javascript使用ES6将对象数组转换为仅具有特定键的数组

时间:2019-04-26 02:13:24

标签: javascript

我有以下数组

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]

我该如何调整它以仅返回带有键值的对象的值以消除未定义的键?

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; }