如何将同一属性上的数组和对象“合并/合并”到平面数组中(使用Javascript)?

Posted

技术标签:

【中文标题】如何将同一属性上的数组和对象“合并/合并”到平面数组中(使用Javascript)?【英文标题】:How to "merge/concat" an array and an object over a same property into a flat array(using Javascript)? 【发布时间】:2019-03-31 06:09:02 【问题描述】:

所以我有一个包含一些项目的数组:['apple','banana','strawberry','peach','orange']。 我还有一个具有相同项目(但不是全部)作为属性的对象:

banana : 0,
strawberry : 2,
peach : 1

我想创建一个包含项目和值的平面数组,如下所示:

['apple',  'not found'
'banana',     '0'
'strawberry,  '2'
'peach',      '1'
'orange',  'not found']

最后我想将 tha 数据写入 csv 文件。为此,我使用了 fast-csv 模块。

我尝试使用 for 循环。有没有更快更有效的方法?

编辑:将二维数组更改为平面数组

【问题讨论】:

【参考方案1】:

您可以使用函数Array.prototype.map 创建具有所需输出的新数组。

let array = ['apple','banana','strawberry','peach','orange'],
    obj = banana : 0,strawberry : 2,peach : 1,
    result = array.map(s => [s, s in obj ? obj[s] : "Not found"]);
    
console.log(result);
.as-console-wrapper  max-height: 100% !important; top: 0; 

【讨论】:

这不完全是需要的结果。应该是result = [].concat(...array.map(s => [s, s in obj ? obj[s] : "Not found"])); 来生成平面数组而不是多维数组的期望结果。 考虑到问题中他想要的输出,我认为 OP 不知道 2D 数组的含义 - 这意味着他正在寻找一个平面数组。 谢谢,我试过了,效果完全符合我的要求。【参考方案2】:
var item = ['apple','banana','strawberry','peach','orange'];
var it = banana : 0,strawberry : 2,peach : 1;

item.map((key)=> return[ key, !it.hasOwnProperty(key) ? 'not found': it[key]];  )

【讨论】:

你的回答有什么解释吗? 是的@rassar,所以要求是我创建的二维数组,你可以测试一下。并且只是检查该属性是否存在于对象上,如果是,则使用key,否则使用not found【参考方案3】:

如果您想根据示例输出获得一个平面数组(不是二维),您可以结合@Ele 的答案并添加一个扩展运算符,如下所示:

let array = ['apple','banana','strawberry','peach','orange'],
    obj = banana : 0,strawberry : 2,peach : 1,
    result = [].concat(...array.map(s => [s, s in obj ? obj[s] : "Not found"]));
    
console.log(result);

【讨论】:

以上是关于如何将同一属性上的数组和对象“合并/合并”到平面数组中(使用Javascript)?的主要内容,如果未能解决你的问题,请参考以下文章

如何将2个图像合并/合并为1个

在cad中怎么可以把不在同一平面上的多条线段合成一条 。请高手帮帮忙,谢谢

javascript 按照块大小(每个子阵列的元素数)将平面数组分组到多维数组中

平面数组重组为树数组

如何将日期,年,月的不同列合并/合并到单个列中

在某些情况下如何合并/合并日期(年份)