我正在尝试将两个数组组合成一个对象数组,我正在为此苦苦挣扎。
例子:
arr1 = [a,b,c];
arr2 = [a,a,a,b,b,c,d,d];
我希望将这两者结合起来的方式:
combinedArr = [
{name: a, amount: 3},
{name: b, amount: 2},
{name: c, amount: 1}
];
请注意,只有存储在 arr1 中的值应该被积分,任何 arr1 中不存在的 arr2 值都会被忽略。(在这个例子中,它是“d”)
同样重要的是要知道我将它用于 After Effect 的 Extendscript,这将我限制在 ECMA-262 标准的第 3 版,给我留下了很好的旧经典 javascript。concat、slice 和 join 等功能不可用。
我已经尝试过,但我想不通。我确信它可以通过阵列通过两个或三个智能循环来实现解决方案。
在此先感谢,西蒙
编辑:我没有在我的问题上添加自己的尝试,从而造成了混乱。对不起,我没有,我想了一夜,在火车上用手机写了这个问题。
我已经收到了令我非常高兴的惊人答案,只是为了证明我对我的问题没有恶意,我将发布我之前写的内容(不是简化,而是来自实际代码):
var createMarkerList = function() {
var subList = _createMarkerListSub(); //in this example arr1
var masterList = _createMarkerListMaster(); //in this example arr2
var output = [];
for(var i=0;i<subList.length;i++){
var uniqueMarker = subList[i];
output.push({
name: uniqueMarker,
amount: 0,
});
}
for(var i=0;i<masterList.length;i++){
var genericMarker = masterList[i];
if(output[i].name == genericMarker){
output[i].amount = output[i].amount +1;
}
}
}
请注意,我并没有试图通过简单地询问你的答案而不试图弄清楚它,我只是出于某种原因无法理解它。