我有两个数组:
第一个包含嵌套数组中字段的唯一名称:
[0][0]:Name1
[0][1]:Name2
[0][2]:Name3
etc.
第二个在嵌套数组中包含多个具有以下值的项:
[0][0] XYZ
[0][1] XYZA
[0][2] XYZ2
[1][0] XYZaa
[1][1] XYZas
[1][2] XYA
etc
我要做的是将其合并并以这种方式命名:
[0] Name1: XYZ
[0] Name2: XYZA
[0] Name3: XYZ2
[1] Name1: XYZaa
[1] Name2: XYZas
[1] Name3: XYA
为此,我首先尝试了以下操作:
var mergedArr = name.concat(data);
那很好,但是我相信我也可以使用lodash来接近我想要的东西:
_.merge(name, data)
并且应该也可以正常工作。
我试图通过使用
来命名_.zipObject
但是它并没有按照我想要的方式工作
我尝试使用zip,zipObject进行一些选择,但没有一个能给我预期的输出。
编辑1: 我如何创建数组:
$("#T1020 tr").each(function(x, z){
name[x] = [];
$(this).children('th').each(function(xx, zz){
name[x][xx] = $(this).text();
});
})
$("#T1020 tr").each(function(i, v){
data[i] = [];
$(this).children('td').each(function(ii, vv){
data[i][ii] = $(this).text();
});
})
答案 0 :(得分:1)
如果我正确理解了您的问题,那么您想将ajax.dataSrc
和array1
压缩为一个数组,其中:
array2
和array1[0]
的每个键对应的嵌套数组的值要产生以下内容:
array2
这可以不加破折号实现;首先通过将[
{
"name1": "xyz",
"name2": "xyza",
"name3": "xyz2"
},
{
"name1": "xyzaa",
"name2": "xyzas",
"name3": "xya"
}
]
简化为一个对象的函数来映射array2
的每一项。缩小的对象由作为当前缩小项目的键和从当前地图项目的索引值获取的值组成:
array1[0]
答案 1 :(得分:0)
使用当前索引和values
运算符对array2
(您的array
)进行迭代,并从键(%
)中获取子数组。这将确保是否以循环方式获取密钥(请参见带有keys2
和values2
的示例)。使用_.zipObject
转换为对象:
const fn = (keys, values) => values.map((v, i) => _.zipObject(keys[i % keys.length], v))
const keys1 = [['name1', 'name2', 'name3']]
const values1 = [['xyz', 'xyza', 'xyz2'], ['xyzaa', 'xyzas', 'xya']]
const keys2 = [['name1', 'name2', 'name3'], ['name11', 'name12', 'name13']]
const values2 = [['xyz', 'xyza', 'xyz2'], ['xyzaa', 'xyzas', 'xya'], ['abc', 'def', 'hij']]
console.log(fn(keys1, values1))
console.log(fn(keys2, values2))
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.11/lodash.js"></script>