gpt4 book ai didi

javascript - 如何以不同的方式合并 javascript 中的数组?

转载 作者:数据小太阳 更新时间:2023-10-29 04:17:02 25 4
gpt4 key购买 nike

我想以稍微不同的方式合并数组。我有 2 个或更多数组,例如:

var array1 = ["apple", "banana"];

var array2 = ["apple", "apple", "orange"];

我想要输出:

var array3 = ["apple", "apple", "banana", "orange"];

因此,如果任何给定数组中不止一次包含一个变量,合并算法应该将所有变量都从该数组中保留下来。

我看到了一些防止重复的代码,但它给出了这样的输出:

var array3 = ["apple", "banana", "orange"];

更多例子:

var arr1 = [1,2,3,4];

var arr2 = [1,1,2,4,5,5,5];

var arr3 = [1,3,3,5,5];

我想要输出:

var array4 = [1,1,2,3,3,4,5,5,5];

我该怎么做?

最佳答案

这是一种通过计算每个数组中每个项目的出现次数来实现的方法:

var arr1 = [1,2,3,4];
var arr2 = [1,1,2,4,5,5,5];
var arr3 = [1,3,3,5,5];

function joinCommon(/* list of arrays */) {
var arr, arrayCounts, masterList = {}, item, output;
// for each array passed in
for (var i = 0; i < arguments.length; i++) {
arr = arguments[i];
arrayCounts = {};
// iterate each array
for (var j = 0; j < arr.length; j++) {
item = arr[j];
if (!arrayCounts[item]) {
arrayCounts[item] = 1;
} else {
++arrayCounts[item];
}
// now keep master list and master counts
if (!masterList[item]) {
masterList[item] = {cnt: 1, val: item};
} else {
masterList[item].cnt = Math.max(masterList[item].cnt, arrayCounts[item]);
}
}
}
// now output result
output = [];
for (var i in masterList) {
for (var j = 0; j < masterList[i].cnt; j++) {
output.push(masterList[i].val);
}
}
return output;
}

var results = joinCommon(arr1, arr2, arr3);

工作演示:http://jsfiddle.net/jfriend00/dtn6zw4m/

关于javascript - 如何以不同的方式合并 javascript 中的数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27770734/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com