嵌套迭代集合

时间:2017-12-19 20:11:59

标签: javascript iterator lodash

我正在尝试使用两个集合的输出来组合字符串。为此,我使用_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

2 个答案:

答案 0 :(得分: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);

答案 1 :(得分: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"]