簡體   English   中英

Javascript將對象數組轉換為僅具有ES6特定鍵的數組

[英]Javascript convert array of objects to an array with only specific keys with ES6

我有以下數組

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]

我如何調整此選項只返回具有鍵值的對象的值以消除未定義的鍵?

你可以使用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和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) 

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

使用函數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; } 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM