给定两个数组和两个索引,我需要连接第一个数组的前缀和第二个数组的反转前缀。
例如:
// Input
arr1 = [1,2,3,4,5,6,7,8,9];
arr2 = [10,11,12,13,14,15];
ind1 = 6;
ind2 = 3;
// Output
arr = [1,2,3,4,5,6,12,11,10];
这是我的代码:
function Concat(arr1,arr2,ind1,ind2) {
let arr = [];
for (let n = 0; n < ind1; n++)
arr.push(arr1[n]);
for (let n = ind2; n > 0; n--)
arr.push(arr2[n-1]);
return arr;
}
我正在寻找一种更好(更干净/更快/更简单/更优雅)的方法来做到这一点。我可以尝试什么?
最佳答案
你可以尝试这样的事情:
注意:这不会比当前方法更快。这只是稍微干净一点。
function Concat(arr1,arr2,ind1,ind2) {
return [].concat(arr1.slice(0, ind1), arr2.slice(0, ind2).reverse());
}
arr1 = [1,2,3,4,5,6,7,8,9];
arr2 = [10,11,12,13,14,15];
ind1 = 6;
ind2 = 3;
console.log(Concat(arr1, arr2, ind1, ind2))
正如建议的那样,不会对性能产生巨大的影响。您可以检查差异js-perf sample 。
<小时/>如果您有能力覆盖输入结构,则可以使用另一种方法。
由于我们期望按自定义顺序排列对象数组,因此很容易使其通用。假设结构为:
请注意语法,因为我正在大量研究 Typescript,对我来说用该语法编写更容易。
interface ConcatObject {
value: Array<any>;
endIndex: number;
isReverse: boolean
}
当你阅读时,它会让代码更容易阅读,也更容易使其通用。
function Concat(arr) {
return arr.reduce(function(acc, cur) {
var temp = cur.value.slice(0, cur.endIndex);
if (cur.isReverse) {
temp = temp.reverse();
}
return acc.concat(temp);
}, []);
}
var data = [{
value: [1, 2, 3, 4, 5, 6, 7, 8, 9],
endIndex: 6
},
{
value: [10, 11, 12, 13, 14, 15],
endIndex: 3,
isReverse: true
}
]
console.log(Concat(data))
关于javascript - 连接数组前缀和数组反转前缀的最佳方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47410021/