如何将同一属性上的数组和对象“合并/合并”到平面数组中(使用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)?的主要内容,如果未能解决你的问题,请参考以下文章
在cad中怎么可以把不在同一平面上的多条线段合成一条 。请高手帮帮忙,谢谢