javascript 如何从两个数组创建一个新数组,并从一个数组的长度和从另一个数组的值?

myzjeezk  于 2023-06-28  发布在  Java
关注(0)|答案(4)|浏览(105)

我有两个数组:

list_a = [20, 20, 20, 21, 21, 22, 20,21, 23, 20, 23, 24]
list_b = [120, 121, 122, 123, 124]

我想从这两个数组中创建下一个数组,如下所示:

newList = [120, 120, 120, 121, 121, 122, 120, 121, 123, 120, 123, 124]

所以第一个数组中的第一个数字将替换为120的值,但不是20的长度,以此类推,之后当20也被定位时,它也将替换为第一个数字
我试了很多方法,都不管用...

ie3xauqp

ie3xauqp1#

您可以为这些值取一个对象,并保留一个不可见值的索引。

const
    list_a = [20, 20, 20, 21, 21, 22, 20, 21, 23, 20, 23, 24],
    list_b = [120, 121, 122, 123, 124],
    result = list_a.map(
        ((values, i) => v => values[v] ?? (values[v] = list_b[i++]))
        ({}, 0)
    );
    
console.log(...result);
console.log(...[120, 120, 120, 121, 121, 122, 120, 121, 123, 120, 123, 124]);
lmvvr0a8

lmvvr0a82#

规格尚不清楚
试试这个,我们创建一个list_a的唯一列表,并使用每个的位置索引到list_B中

const list_a = [20, 20, 20, 21, 21, 22, 20, 21, 23, 20, 23, 24]
const list_b = [120, 121, 122, 123, 124]
const idxList = [...new Set(list_a)]; // unique and placements
const newList = list_a.map(num => {
  const idx = idxList.indexOf(num)
  return list_b[idx]
});

console.log(newList)
1zmg4dgp

1zmg4dgp3#

Sets可能有一个更优雅的解决方案,但我首先想到的是先创建hash map,然后通过list_aarray创建map
此解决方案允许list_b中的任何值,但要求满足以下条件:

unique_values_list_b.length >= unique_values_list_a

我希望这能帮助你,或者让你走上正确的道路。

(function main () {
    const list_a = [20, 20, 20, 21, 21, 22, 20,21, 23, 20, 23, 24]
    const list_b = [120, 121, 122, 123, 124]

    let i = 0
    const hash = new Map([])

    // setting up a hash
    for(let a of list_a){
        if(hash.has(a)) continue
    
        hash.set(a, list_b[i++])        
    }

    // creating your new list

    const newList = list_a.map(element => hash.get(element))
    console.log(newList)
})()
xhv8bpkk

xhv8bpkk4#

let list_a = [20, 20, 20, 21, 21, 22, 20, 21, 23, 20, 23, 24];
let list_b = [120, 121, 122, 123, 124];

let output = list_a.map((e) => {
  return parseInt('1' + e);
});

console.log(output);

相关问题