我如何 return 使用来自不同数组的多个索引拼接数组
how do i return a spliced array using multiple indexes from a different array
dft=["t", "h", "i", "s", "I", "s", "S", "p", "i", "n", "a", "l", "T", "a", "p"];
ans=[4, 6, 12, -1];
for(x=0;x<ans-1;x++){
dft.splice(ans[x],0,"-");}
return dft;
我正在尝试 return 使用 ans 数组中的索引(-1 索引除外)将具有“-”的数组放入 dft 数组。
我得到的结果是 ["t"、"h"、"i"、"s"、"I"、"s"、"S", "p", "i", "n", "a", "l", "T", "a", "p"]
首先,它没有做任何事情,因为你的 for 循环结束条件应该根据 ans
数组的 length 检查循环参数 x
,即 x < ans.length -1
。其次,由于 splice
正在更改数组,因此在插入第一个连字符后,您的 ans
索引将不正确,因此您应该按相反的顺序进行操作,如下所示:
dft = ["t", "h", "i", "s", "I", "s", "S", "p", "i", "n", "a", "l", "T", "a", "p"];
ans = [4, 6, 12, -1];
for (x = ans.length - 2; x >= 0; x--) {
dft.splice(ans[x], 0, "-");
}
console.log(dft);
我们从数组的末尾开始,也就是 ans.length - 1
,除非您想跳过最后一个元素,所以我们从 ans.length - 2
开始。请记住,这假设最后一个元素应该被忽略。
您可以通过 Array#reduce
达到您想要的结果。
let dft = ["t", "h", "i", "s", "I", "s", "S", "p", "i", "n", "a", "l", "T", "a", "p"];
let ans = [4, 6, 12, -1];
let res = dft.reduce((s,a,i) => {
(ans.indexOf(i) > -1) ? s.push(a, '-') : s.push(a);
return s;
}, []);
console.log(res);
您需要对索引数组进行排序,并按相反的顺序进行,否则会更改其他元素的索引。
var dft = ["t", "h", "i", "s", "I", "s", "S", "p", "i", "n", "a", "l", "T", "a", "p"],
ans = [4, 6, 12, -1];
// sor the array to place - at the last higher index first
ans.sort(function(a, b) {
return a - b;
});
// get array length
var x = ans.length;
// iterate upto index reach to 0 or reaching to -1
while (x-- && ans[x] > -1) {
dft.splice(ans[x], 0, "-");
}
console.log(dft);
数组没有原始数字,因此您希望 for 循环条件读取 x < ans.length.
您的索引也需要是 ans[x] + x,因为每个 splice() 都会将数组的长度增加 1。
仅这些更改就可以实现您的既定目标。不过我还要补充:
您应该有目的地声明变量,而不是使用隐式全局变量。
你可以用forEach()方法代替你的for循环,这样可以让你的意图更明确。
您可能希望术语和运算符之间有空格,这也有助于提高可读性。
为了完整起见,Array#reduceRight
的解决方案
var array = ["t", "h", "i", "s", "I", "s", "S", "p", "i", "n", "a", "l", "T", "a", "p"],
indices = [4, 6, 12, -1],
result = indices.reduceRight((r, i) => (~i && r.splice(i, 0, '-'), r), array);
console.log(result.join(''));
dft=["t", "h", "i", "s", "I", "s", "S", "p", "i", "n", "a", "l", "T", "a", "p"];
ans=[4, 6, 12, -1];
for(x=0;x<ans-1;x++){
dft.splice(ans[x],0,"-");}
return dft;
我正在尝试 return 使用 ans 数组中的索引(-1 索引除外)将具有“-”的数组放入 dft 数组。
我得到的结果是 ["t"、"h"、"i"、"s"、"I"、"s"、"S", "p", "i", "n", "a", "l", "T", "a", "p"]
首先,它没有做任何事情,因为你的 for 循环结束条件应该根据 ans
数组的 length 检查循环参数 x
,即 x < ans.length -1
。其次,由于 splice
正在更改数组,因此在插入第一个连字符后,您的 ans
索引将不正确,因此您应该按相反的顺序进行操作,如下所示:
dft = ["t", "h", "i", "s", "I", "s", "S", "p", "i", "n", "a", "l", "T", "a", "p"];
ans = [4, 6, 12, -1];
for (x = ans.length - 2; x >= 0; x--) {
dft.splice(ans[x], 0, "-");
}
console.log(dft);
我们从数组的末尾开始,也就是 ans.length - 1
,除非您想跳过最后一个元素,所以我们从 ans.length - 2
开始。请记住,这假设最后一个元素应该被忽略。
您可以通过 Array#reduce
达到您想要的结果。
let dft = ["t", "h", "i", "s", "I", "s", "S", "p", "i", "n", "a", "l", "T", "a", "p"];
let ans = [4, 6, 12, -1];
let res = dft.reduce((s,a,i) => {
(ans.indexOf(i) > -1) ? s.push(a, '-') : s.push(a);
return s;
}, []);
console.log(res);
您需要对索引数组进行排序,并按相反的顺序进行,否则会更改其他元素的索引。
var dft = ["t", "h", "i", "s", "I", "s", "S", "p", "i", "n", "a", "l", "T", "a", "p"],
ans = [4, 6, 12, -1];
// sor the array to place - at the last higher index first
ans.sort(function(a, b) {
return a - b;
});
// get array length
var x = ans.length;
// iterate upto index reach to 0 or reaching to -1
while (x-- && ans[x] > -1) {
dft.splice(ans[x], 0, "-");
}
console.log(dft);
数组没有原始数字,因此您希望 for 循环条件读取 x < ans.length.
您的索引也需要是 ans[x] + x,因为每个 splice() 都会将数组的长度增加 1。
仅这些更改就可以实现您的既定目标。不过我还要补充:
您应该有目的地声明变量,而不是使用隐式全局变量。
你可以用forEach()方法代替你的for循环,这样可以让你的意图更明确。
您可能希望术语和运算符之间有空格,这也有助于提高可读性。
为了完整起见,Array#reduceRight
var array = ["t", "h", "i", "s", "I", "s", "S", "p", "i", "n", "a", "l", "T", "a", "p"],
indices = [4, 6, 12, -1],
result = indices.reduceRight((r, i) => (~i && r.splice(i, 0, '-'), r), array);
console.log(result.join(''));