转换对象数组后将它们分成两半:JavaScript

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

我有一个与此类似的对象数组:

arr = [{ val: 1, ts : 123},{val: 2, ts : 125},{val: 3,ts : 120}, {val: 4, ts : 113} , {val:5, ts : 117},{ val: 6, ts : 143},{val: 7, ts : 193},{val: 8, ts : 187}, {val: 9, ts : 115} , {val:10,ts : 116}]

数组的长度始终是偶数。现在基本上我想将它们分成两半。

split1 = [{ val: 1, ts : 123},{val: 2, ts : 125},........,{val:5, ts : 117}]
split2 = [{ val: 6, ts : 143},{val: 7, ts : 193},........,{val:10,ts : 116}]

我必须映射这些数组并转换它们的字段(array1的第一项和array2的第一项,依此类推)。假设第一个数组的对象具有(键val和ts)的对象称为“旧”数组,第二个数组的对象具有(键val和ts的键)对象称为“新”数组。因此,我将它们映射了,最终应该看起来像这样

final = [
          { oldVal:1, oldts: 123 , newVal:6, newts: 143},
          { oldVal:2, oldts: 125 , newVal:7, newts: 193},
          { oldVal:3, oldts: 120 , newVal:8, newts: 187},
          { oldVal:4, oldts: 113 , newVal:9, newts: 115},
          { oldVal:5, oldts: 117 , newVal:10, newts: 116},
        ]

我尝试过的是:

var res= a.splice(0, arr.length/2);
var c = a.map((val, ind) => { {val, res[ind]} })

有人可以在这里指导吗?

javascript arrays ecmascript-6 ecmascript-5
2个回答
1
投票
您可以简单地遍历数组的一半,并将第i个元素和第i + half个作为其对:

const arr = [{ val: 1, ts : 123},{val: 2, ts : 125},{val: 3,ts : 120}, {val: 4, ts : 113} , {val:5, ts : 117},{ val: 6, ts : 143},{val: 7, ts : 193},{val: 8, ts : 187}, {val: 9, ts : 115} , {val:10,ts : 116}]; const final = []; const half = arr.length / 2; for (let i = 0; i < half; i++) { final.push({ oldVal: arr[i].val, oldTs: arr[i].ts, newVal: arr[i + half].val, newTs: arr[i + half].ts, }); } console.log(final);

0
投票
我不确定是否必须对数组进行切片,但这是我的方法:

arr = [{ val: 1, ts : 123},{val: 2, ts : 125},{val: 3,ts : 120}, {val: 4, ts : 113} , {val:5, ts : 117},{ val1: 6, ts : 143},{val1: 7, ts : 193},{val1: 8, ts : 187}, {val1: 9, ts : 115} , {val1:10,ts : 116}]; let final = []; arr.forEach(function(v, i) { if (i >= arr.length / 2) return false; final[i] = {oldVal: v.val, oldTs: v.ts, newVal: arr[i + arr.length / 2].val1, newTs: arr[i + arr.length / 2].ts} }); console.log(final)
© www.soinside.com 2019 - 2024. All rights reserved.