javascript - 连接数组前缀和数组反转前缀的最佳方法

标签 javascript arrays

给定两个数组和两个索引,我需要连接第一个数组的前缀和第二个数组的反转前缀。

例如:

// 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/

相关文章:

javascript - 根据所选项目数量回显

java - 句子生成器java

c# - 反转数组中的元素

javascript - 使用 JavaScript 将 DIV 元素添加到 IFRAME 中

javascript - 在appendChild之后发生的事件

通过函数传递数组时python列表索引超出范围

javascript - 从对象数组中提取数据(问题稍微复杂)

javascript - 在下拉 javascript 中显示选定的选项

javascript - 类型错误:从函数调用时 null 不是对象

javascript - 从数组返回一个字符串