typescript 使用javascript合并两个数组的最佳方法是什么?

ghg1uchk  于 2022-12-14  发布在  TypeScript
关注(0)|答案(4)|浏览(238)

我将编写一个函数来创建这样的数组

["0-AA", "0-BB", "1-AA", "1-BB", "2-AA", "2-BB", "3-AA", "3-BB"]

确切地说,此函数是以下两个数组的组合,并带有分隔符“-”。例如:

arr1 = [0,1,2,3]    //number
arr2 = ["AA", "BB"]  //produce code

结果始终等于两个数组长度的乘积。两个数组的大小可能会更改。第一个数组始终为整数
我想知道一个好的方法来根据规则合并数组。有没有可能用一个只包含数组的函数来写,比如map,concat等等,而不用重复的语句,比如for语句?

5fjcxozz

5fjcxozz1#

这称为Carthesian product,每个数组需要一个循环。这里,我使用mapflatMap来实现此目的。

function product(a, b, sep) {
  return a.flatMap(ae => b.map(be => ae + sep + be))
}

const arr1 = [0,1,2,3]
const arr2 = ["AA", "BB"]
const result = product(arr1, arr2, "-")
console.log(result)

或者是一个广义的版本,其中product接受任意数量的数组并返回元组,你可以自己连接它们。reduce提供的额外循环对输入数组进行迭代。

function product(...arrs) {
  return arrs.reduce(
    (result, arr) =>
      result.flatMap(re =>
        arr.map(ae => re.concat([ae]))
      ),
    [[]],
  )
}

const arr1 = [0,1,2,3]
const arr2 = ["AA", "BB"]
const result = product(arr1, arr2).map(items => items.join('-'))
console.log(result)
xyhw6mcr

xyhw6mcr2#

您可以使用.reduce.forEach

arr1 = [....]
arr2 = [....]

result = arr1.reduce((acc,value) => {
  arr2.forEach(str => acc.push(`${value}-${str}`))
  return acc;
}, [])
4c8rllxm

4c8rllxm3#

你当然可以像其他人那样做

const array1 = [1, 2, 3]
const array2 = ['a', 'b', 'c']

const product = array1
    .reduce((product, value1) => (
        product.push(array2.map(value2 => value1 + '-' + value2)),
        product), [])
    .flat()

我建议使用一个更传统的函数和for循环,因为在速度和内存使用方面有轻微的性能提升。

function product(array1, array2, separator = '') {
    const product = []
    for (let i = 0; i < array1.length; ++i)
        for (let j = 0; j < array2.length; ++j)
            product.push(array1[i] + separator + array2[j])
    return product
}
xlpyo6sf

xlpyo6sf4#

对于您的最后一个要求,
有没有可能用只包含数组的函数(如map、concat等)编写代码,而不用重复的语句(如for语句)?
我想你接受array.forEach()

const arr1 = [0,1,2,3];
const arr2 = ["AA", "BB"]

const result = []

arr1.forEach((number)=>{
  arr2.forEach((code)=>{
    result.push(`${number}-${code}`)
  })
})

console.log(result)

相关问题