петля внутри петли - PullRequest
       14

петля внутри петли

0 голосов
/ 02 сентября 2018

У меня есть массив как построить:

"list": [
    {
        "insideList": [{"code": "0", "image": "./images/1"},
                    {"code": "1", "image": "./images/2"},
                    {"code": "2", "image": "./images/3"}],
        "bucket": "info",
        "instructions": "first set".\n",
        "color": "rgb(242, 242, 140)",
        "id": "a",
        "text": "first quest"
    },
   ...

Я пытаюсь сгладить этот список с помощью lodash, но я не знаю, как отобразить карту внутри карты, когда первая карта тоже что-то делает. то, что я сделал для внешнего цикла:

var withIndex = _.map(list,(item, i) => ({

      [`iv_${i}_text`]: item.text,
      [`iv_${i}_instructions`]: item.instructions,
      [`iv_${i}_color`]: item.color,
      [`iv_${i}_id`]: item.id,
      [`iv_${i}_bucket`]: item.bucket,
    }));

но теперь я хочу добавить внутренний цикл в список «аспектов» и построить что-то вроде этого:

 var withIndex = _.map(list,(item, i) => ({
  [`iv_${i}_text`]: item.text,
  [`iv_${i}_instructions`]: item.instructions,
  [`iv_${i}_color`]: item.color,
  [`iv_${i}_id`]: item.id,
  [`iv_${i}_bucket`]: item.bucket,
  [`iv_${i}_a_0_code`]: item.insideList[0].code,       
  [`iv_${i}_a_0_image`]: item.insideList[0].image,  
  [`iv_${i}_a_1_code`]: item.insideList[1].code,       
  [`iv_${i}_a_1_image`]: item.insideList[1].image,
  [`iv_${i}_a_2_code`]: item.insideList[2].code,       
  [`iv_${i}_a_2_image`]: item.insideList[2].image
}));

Можно сделать что-то подобное, используя lodash?

var withIndex = _.map(list,(item, i) => ({
      [`iv_${i}_text`]: item.text,
      [`iv_${i}_instructions`]: item.instructions,
      [`iv_${i}_color`]: item.color,
      [`iv_${i}_id`]: item.id,
      [`iv_${i}_bucket`]: item.bucket,

и здесь делаем еще одну карту:

 _map(insideLoop, (item, j)=> ({
      [`iv_${i}_a_{j}_code`]: item.insideList[0].code,       
      [`iv_${i}_a_{j}_image`]: item.insideList[0].image,  
      [`iv_${i}_a_{j}_code`]: item.insideList[1].code,       
      [`iv_${i}_a_{j}_image`]: item.insideList[1].image,
      [`iv_${i}_a_{j}_code`]: item.insideList[2].code,       
      [`iv_${i}_a_{j}_image`]: item.insideList[2].image
    }));

1 Ответ

0 голосов
/ 02 сентября 2018

Уменьшение (накопление) свойств объекта должно сработать, а затем просто объединить оба объекта:

var withIndex = _.map(list, (item, i) => _.assign(
  {
    [`iv_${i}_text`]: item.text,
    [`iv_${i}_instructions`]: item.instructions,
    [`iv_${i}_color`]: item.color,
    [`iv_${i}_id`]: item.id,
    [`iv_${i}_bucket`]: item.bucket,
  },
  _.reduce(item.insideList, (acc, x, j) => {
    acc[`iv_${i}_a_${j}_code`]: x.code
    acc[`iv_${i}_a_${j}_image`]: x.image
    return acc
  }, {})
));

Также вам не нужен lodash в конце концов (нативные функции работают быстрее):

var withIndex = list.map((item, i) => Object.assign(
  {
    [`iv_${i}_text`]: item.text,
    [`iv_${i}_instructions`]: item.instructions,
    [`iv_${i}_color`]: item.color,
    [`iv_${i}_id`]: item.id,
    [`iv_${i}_bucket`]: item.bucket,
  },
  item.insideList.reduce((acc, x, j) => {
    acc[`iv_${i}_a_${j}_code`]: x.code
    acc[`iv_${i}_a_${j}_image`]: x.image
    return acc
  }, {})
));
...