转换对象数组 post 将它们分成两半:Javascript
Convert array of objects post splitting them in half: Javascript
我有一个类似于这样的对象数组:
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 的第一项等等)。假设第一个数组称为 "old" array with objects having(keys val and ts) 第二个数组称为 "new" array with objects having(keys val and 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]} })
有人可以指导吗?
您可以简单地遍历数组的一半,并将第 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);
我不确定你是否必须对数组进行切片,但这是我的方法:
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].val, newTs: arr[i + arr.length / 2].ts}
});
console.log(final)
您可以采用单循环方法并在数组循环时更改值。
var data = [{ 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 }],
result = data.reduce((r, { val, ts }, i, { length }) => {
const index = i % (length >> 1);
if (r[index]) {
r[index].newVal = val;
r[index].newts = ts;
} else {
r[index] = { oldVal: val, oldts: ts };
}
return r;
}, []);
console.log(result);
.as-console-wrapper { max-height: 100% !important; top: 0; }
var newArr = [];
var half = Math.floor(arr.length / 2);
for (var i = 0; i < half; i++){
newArr.push({oldVal: arr[i].val, oldTs: arr[i].ts, newVal: arr[i + half].val, newTs: arr[i + half].ts})
}
**P.S 如果您的原始数组长度为偶数,您将有剩余项
我有一个类似于这样的对象数组:
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 的第一项等等)。假设第一个数组称为 "old" array with objects having(keys val and ts) 第二个数组称为 "new" array with objects having(keys val and 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]} })
有人可以指导吗?
您可以简单地遍历数组的一半,并将第 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);
我不确定你是否必须对数组进行切片,但这是我的方法:
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].val, newTs: arr[i + arr.length / 2].ts}
});
console.log(final)
您可以采用单循环方法并在数组循环时更改值。
var data = [{ 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 }],
result = data.reduce((r, { val, ts }, i, { length }) => {
const index = i % (length >> 1);
if (r[index]) {
r[index].newVal = val;
r[index].newts = ts;
} else {
r[index] = { oldVal: val, oldts: ts };
}
return r;
}, []);
console.log(result);
.as-console-wrapper { max-height: 100% !important; top: 0; }
var newArr = [];
var half = Math.floor(arr.length / 2);
for (var i = 0; i < half; i++){
newArr.push({oldVal: arr[i].val, oldTs: arr[i].ts, newVal: arr[i + half].val, newTs: arr[i + half].ts})
}
**P.S 如果您的原始数组长度为偶数,您将有剩余项