如何合并数组中的值或索引

时间:2017-08-19 16:16:05

标签: javascript arrays array-merge

如何合并值或合并索引,
例如,我有:

var input = [
            ["0001", "Roman Alamsyah", "Bandar Lampung", "21/05/1989", "Membaca"],
            ["0002", "Dika Sembiring", "Medan", "10/10/1992", "Bermain Gitar"],      
        ];

我希望我的数组是

var output = [
            ["0001", "Roman Alamsyah", "Bandar Lampung 21/05/1989", "Membaca"],
            ["0002", "Dika Sembiring", "Medan 10/10/1992", "Bermain Gitar"]
        ];

感谢

3 个答案:

答案 0 :(得分:1)

您可以使用destructuring assignment

[a,b,c,d] = [1,2,3,4];
var mergedArr = [a,+(""+b+c),d];

console.log(mergedArr);

通过这种方式,您可以将每个数组元素视为某个索引处的变量。之后,您可以根据需要合并每个变量。

必须提到的是,所有浏览器都不支持此运算符。

除了更新的问题:

您还可以实现一个函数,该函数以给定的开始和结束索引递归地合并数组元素。以这种复苏的方式,您也可以合并子数组。

var input = [
  ['0001',
  'Roman Alamsyah',
  'Bandar Lampung',
  '21/05/1989',
  'Membaca'],
  [
    '0002',
    'Dika Sembiring',
    'Medan',
    '10/10/1992',
    'Bermain Gitar'
  ],
];
  
var input2 = [
  [
    ['0001',
     'Roman Alamsyah',
     'Bandar Lampung',
     '21/05/1989',
     'Membaca']
  ],
  [
  '0002',
  'Dika Sembiring',
  'Medan',
  '10/10/1992',
  'Bermain Gitar'
  ],
];

function mergeValues(arr, start, end) {
  if (arr.__proto__.constructor === Array && arr[0].__proto__.constructor !== Array) {
    var mergedValues = [];
    var result = [];
    arr.forEach(function (value, index) {
      if (index < start) result.push(value);
       else if (index > end) {
        if (mergedValues.length) {
          result.push(mergedValues.join(' '));
          mergedValues = [];
        }
        result.push(value);
      } 
      else mergedValues.push(value);
    });
    return result;
  } 
  else {
    return arr.map(function (subarr) {
      return mergeValues(subarr, start, end);
    });
  }
}

console.log("input: ",mergeValues(input, 2, 3));
console.log("input2: ",mergeValues(input2, 2, 3));

希望这会有所帮助。

答案 1 :(得分:0)

不确定这是否是您想要的,但它会产生问题所要求的输出:

[1,2,3,4].reduce(
    (accumulator, currentValue, currentIndex, array) => {
        (currentIndex !== 1 && currentIndex !== 2)
            ? accumulator.push(currentValue)
            : currentIndex === 1
                ? accumulator.push(
                    Number.parseInt(
                        array[currentIndex].toString()
                        + array[currentIndex + 1].toString()
                    )
                )
                : undefined ;
        return accumulator ;
    }
    , []
)

请参阅:MDN上的Array.prototype.reduce()

答案 2 :(得分:0)

您可以指定索引joinAt,其中必须连接接下来的两个元素,然后使用新的拼接部分字符串拼接数组。

var array = [
        ["0001", "Roman Alamsyah", "Bandar Lampung", "21/05/1989", "Membaca"],
        ["0002", "Dika Sembiring", "Medan", "10/10/1992", "Bermain Gitar"],
    ],
    joinAt = 2;

array.forEach(function (a) {
    a.splice(joinAt, 0, a.splice(joinAt, 2).join(' '));
});

console.log(array);
.as-console-wrapper { max-height: 100% !important; top: 0; }