嵌套迭代集合

问题描述 投票:0回答:2

我试图使用两个集合的输出组装一个字符串。为此,我使用_forEach函数迭代其中一个,并使用它的输出作为另一个迭代器的输入。但我不能让它发挥作用。

码:

    const data1 = [{
        label: 'Id',
        data: 'id'
      },
      {
        label: 'First name',
        data: 'first_name'
      },
      {
        label: 'Last name',
        data: 'last_name'
      },
      {
        label: 'IP Address',
        data: 'ip_address'
      },
    ];

const data2 = [{
  "id": 1,
  "first_name": "Robinet",
  "last_name": "Golsby",
  "ip_address": "201.83.127.236"
}, {
  "id": 2,
  "first_name": "Kirby",
  "last_name": "Feaver",
  "ip_address": "143.188.49.149"
}]

let keys = '';
const getKeys = _.forEach(data1, value => keys += '' +value.data);

let stringValue = '';
const getStringValue = _.forEach(tableData, value => stringValue += ' ' + value.first_name);

所以我可以从第一个对象获得一个键列表,我可以从第二个获取值列表,但前提是键是硬编码的。我想要做的是迭代'外部'迭代器中的data2中的每个条目,同时提供密钥以使用data1上的迭代来获取值。我怎么做?

编辑:最终结果如下:

1 Robinet Golsby 201.83.127.236

javascript iterator lodash
2个回答
0
投票

似乎:

const result = _.chain(data1)
    .map('data') // get keys from data1
    .thru(keys => _.map(data2, item => _.at(item, keys))) // iterate data2 and get values by keys
    .map(values => _.join(values, ' ')) // values array to string
    .value();

结果:

["1 Robinet Golsby 201.83.127.236", "2 Kirby Feaver 143.188.49.149"]

0
投票

我不确定这是否正是你想要的,但我认为你可以使用嵌套Array#map调用实现你的目标:

const data1 = [{"label":"Id","data":"id"},{"label":"First name","data":"first_name"},{"label":"Last name","data":"last_name"},{"label":"IP Address","data":"ip_address"}];
const data2 = [{"id":1,"first_name":"Robinet","last_name":"Golsby","ip_address":"201.83.127.236"},{"id":2,"first_name":"Kirby","last_name":"Feaver","ip_address":"143.188.49.149"}];

const result = data2.map((obj) => data1.map(({ label, data }) => ({
  label,
  data: obj[data]
})));

console.log(result);
最新问题
© www.soinside.com 2019 - 2025. All rights reserved.