如何通过不同数组中的值命名数组中的值?

时间:2019-06-23 21:45:06

标签: javascript arrays lodash

我有两个数组:

第一个包含嵌套数组中字段的唯一名称:

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

      });
   })

2 个答案:

答案 0 :(得分:1)

如果我正确理解了您的问题,那么您想将ajax.dataSrcarray1压缩为一个数组,其中:

  • 结果数组的每个项目都是一个对象
  • 每个对象的键是array2
  • 的值
  • array1[0]的每个键对应的嵌套数组的值

要产生以下内容:

array2

这可以不加破折号实现;首先通过将[ { "name1": "xyz", "name2": "xyza", "name3": "xyz2" }, { "name1": "xyzaa", "name2": "xyzas", "name3": "xya" } ] 简化为一个对象的函数来映射array2的每一项。缩小的对象由作为当前缩小项目的键和从当前地图项目的索引值获取的值组成:

array1[0]

答案 1 :(得分:0)

使用当前索引和values运算符对array2(您的array)进行迭代,并从键(%)中获取子数组。这将确保是否以循环方式获取密钥(请参见带有keys2values2的示例)。使用_.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>