【发布时间】:2017-09-25 06:49:55
【问题描述】:
我正在尝试将两个数组组合成一个对象数组,但我正在为此苦苦挣扎。
例子:
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 Effects 的 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;
}
}
}
请注意,我并没有试图通过简单地询问您的答案而不试图弄清楚,我只是出于某种原因无法理解它。
【问题讨论】:
-
你有没有尝试过?
-
我同意 Rajesh 的观点,这只是一些基础知识,我建议先阅读 javascript 教程
-
@Simon,记住分享你的努力非常重要。它可以是代码/算法/搜索链接。除非你分享它,否则你的问题看起来像是一个要求,而不是一个问题陈述。这可能会吸引不需要的选票/cmets
标签: javascript arrays object ecmascript-3