将单个数组中的值修改为不同格式的更好方法
Better way to modify values in a single array to different format
这可能是一个重复的问题。但是我在这个论坛里没有找到类似的问题。
我正在尝试将数组中的值修改为不同的格式。
arrayInput = ['A', 'B', 'C', 'D', 'E', 'F'];
arrayOutput= ['A;B', 'C;D', 'E;F'];
我通过以下方法得到了解决方案
let arrayInput = ['A', 'B', 'C', 'D', 'E', 'F']
arrayOutput = [arrayInput[0]+';'+ arrayInput[1], arrayInput[2]+';'+ arrayInput[3]];
if (arrayInput[4]) {
let val = arrayInput[4] + (arrayInput[5] ? ';'+arrayInput[5] : '');
arrayOutput.push(val);
}
console.log(arrayOutput);
但我正在寻找一种通用解决方案,这样即使数组中有更多项,它也应该以所需格式生成输出。
['A', 'B', 'C', 'D', 'E', 'F', 'G'] ==> ['A;B', 'C;D', 'E;F', 'G']
['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H'] ==> ['A;B', 'C;D', 'E;F', 'G;H']
感谢支持
使用for
循环,每次循环递增2:
const arrayInput = ['A', 'B', 'C', 'D', 'E', 'F', 'G'];
const res = [];
for (let i = 0; i < arrayInput.length; i += 2) {
const part1 = arrayInput[i];
const part2 = arrayInput[i + 1];
if (part1) {
res.push(part1 + (part2 ? (';' + part2) : ''));
}
}
console.log(res);
你可以尝试这样的事情(基于数组 reduce
和 join
的实现):
const arrayInput = ['A', 'B', 'C', 'D', 'E', 'F'];
let temp = [];
const output = arrayInput.reduce((accumulator, item) => {
if (temp.length < 2) {
temp.push(item);
} else {
accumulator.push(temp.join(';'));
temp = [];
}
return accumulator;
}, []);
console.log(output)
使用 foreach :
let arrayInput = ['A', 'B', 'C', 'D', 'E', 'F','G','H','I']
let newArray = [];
arrayInput.forEach((e,i) => {
if((i + 1)%2==0)
{
newArray[newArray.length -1] = `${newArray[newArray.length -1]};${e}`
}
else
{
newArray.push((i + 1) < newArray.length ? `${e};` : e)
}
});
console.log(newArray)
您可以在下面的演示中使用 Array#reduce
。以防万一元素数量为奇数,我在此处包含了一个测试 ${arr[i+1] ? ";" + arr[i+1] : ""}
;否则使用 ${arr[i+1]}
,如果你总是有偶数个元素。
const arrayInput = ['A', 'B', 'C', 'D', 'E', 'F'],
arrayOutput = arrayInput.reduce(
(acc,cur,i,arr) =>
i % 2 === 0 ?
[...acc,`${cur}${arr[i+1] ? ";" + arr[i+1] : ""}`] :
acc,
[]
);
console.log( arrayOutput );
//OUTPUT: ['A;B', 'C;D', 'E;F'];
这可能是一个重复的问题。但是我在这个论坛里没有找到类似的问题。
我正在尝试将数组中的值修改为不同的格式。
arrayInput = ['A', 'B', 'C', 'D', 'E', 'F'];
arrayOutput= ['A;B', 'C;D', 'E;F'];
我通过以下方法得到了解决方案
let arrayInput = ['A', 'B', 'C', 'D', 'E', 'F']
arrayOutput = [arrayInput[0]+';'+ arrayInput[1], arrayInput[2]+';'+ arrayInput[3]];
if (arrayInput[4]) {
let val = arrayInput[4] + (arrayInput[5] ? ';'+arrayInput[5] : '');
arrayOutput.push(val);
}
console.log(arrayOutput);
但我正在寻找一种通用解决方案,这样即使数组中有更多项,它也应该以所需格式生成输出。
['A', 'B', 'C', 'D', 'E', 'F', 'G'] ==> ['A;B', 'C;D', 'E;F', 'G']
['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H'] ==> ['A;B', 'C;D', 'E;F', 'G;H']
感谢支持
使用for
循环,每次循环递增2:
const arrayInput = ['A', 'B', 'C', 'D', 'E', 'F', 'G'];
const res = [];
for (let i = 0; i < arrayInput.length; i += 2) {
const part1 = arrayInput[i];
const part2 = arrayInput[i + 1];
if (part1) {
res.push(part1 + (part2 ? (';' + part2) : ''));
}
}
console.log(res);
你可以尝试这样的事情(基于数组 reduce
和 join
的实现):
const arrayInput = ['A', 'B', 'C', 'D', 'E', 'F'];
let temp = [];
const output = arrayInput.reduce((accumulator, item) => {
if (temp.length < 2) {
temp.push(item);
} else {
accumulator.push(temp.join(';'));
temp = [];
}
return accumulator;
}, []);
console.log(output)
使用 foreach :
let arrayInput = ['A', 'B', 'C', 'D', 'E', 'F','G','H','I']
let newArray = [];
arrayInput.forEach((e,i) => {
if((i + 1)%2==0)
{
newArray[newArray.length -1] = `${newArray[newArray.length -1]};${e}`
}
else
{
newArray.push((i + 1) < newArray.length ? `${e};` : e)
}
});
console.log(newArray)
您可以在下面的演示中使用 Array#reduce
。以防万一元素数量为奇数,我在此处包含了一个测试 ${arr[i+1] ? ";" + arr[i+1] : ""}
;否则使用 ${arr[i+1]}
,如果你总是有偶数个元素。
const arrayInput = ['A', 'B', 'C', 'D', 'E', 'F'],
arrayOutput = arrayInput.reduce(
(acc,cur,i,arr) =>
i % 2 === 0 ?
[...acc,`${cur}${arr[i+1] ? ";" + arr[i+1] : ""}`] :
acc,
[]
);
console.log( arrayOutput );
//OUTPUT: ['A;B', 'C;D', 'E;F'];