首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Javascript使用ES6将对象数组转换为只有特定键的数组

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

Stack Overflow用户
提问于 2019-04-26 02:13:23
回答 3查看 587关注 0票数 1

我有以下数组

代码语言:javascript
运行
复制
const array = [{name:'one', value:1},{name:'two'},{name:'three', value:3}]

我想要的是

代码语言:javascript
运行
复制
const finalarr = [1,3]

,即获得一个具有键值的值数组。

所以我试过

代码语言:javascript
运行
复制
const finalarr = arr.map(obj=>obj.value)

以上返回[1, undefined, 3];

我也试过

代码语言:javascript
运行
复制
const finalarr = arr.map(obj => {
       if (obj.value) {
         return obj.value;
       }
    }) 

但我还是得到了[1, undefined,3]

如何将其调整为只返回具有键值的对象的值以消除未定义的键?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2019-04-26 02:18:15

使用函数reduce,因为函数map返回一个与源数组长度相同的数组。

代码语言:javascript
运行
复制
const finalarr = arr.reduce((a, {value}) => {
    if (value) a.push(value);
    return a;
}, []); 

重要:您的方法是跳过值等于零0的对象。

示例

代码语言:javascript
运行
复制
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);
代码语言:javascript
运行
复制
.as-console-wrapper { max-height: 100% !important; top: 0; }

票数 1
EN

Stack Overflow用户

发布于 2019-04-26 02:15:54

您可以使用减缩

代码语言:javascript
运行
复制
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)

用于将整个数组映射回已更改的值的映射--它不会跳过值--您可以使用映射和筛选来实现目的

代码语言:javascript
运行
复制
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
EN

Stack Overflow用户

发布于 2019-04-26 02:17:00

array .map方法将返回与原始数组大小完全相同的另一个数组。

如果您想要一个大小不同的结果,您不能只使用纯.map

您可以做的是首先使用.filter out对象,而不使用.value属性:

代码语言:javascript
运行
复制
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

代码语言:javascript
运行
复制
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);

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55859923

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档