我有两个阵列Array1和Array2,我想比较它们,就像它们遵循以下三个规则
Fisrt Thing:
Array1=[en,fr,eg];
Array2=[{lang:en},{lang:eg}]
比较结果将是
Result=[{lang:en},{lang:fr,Maybe:i_can_add_other_Attribute},{lang:eg}]
第二件事
如果Array1=[en,fr,eg]
和Array2=[{lang:en},{lang:fr}]
,则结果应为Result[{lang:en},{lang:fr}]
第三件事
Array2应该按照Array1的顺序排列,例如
Array1=[en,fr,eg]
Array2=[{lang:fr},{lang:en},{lang:eg}]
然后结果应该变成
Result=[{lang:en},{lang:fr},{lang:eg}]
答案 0 :(得分:1)
看起来你并不真正关心Array2
中最初的内容,而只关注Array
中的内容。您只想直接根据Array1
中的值创建一个新的对象数组,您可以使用Array.prototype.map轻松完成这些操作:
const Array1 = [ 'en', 'fr', 'eg' ];
let Array2 = [ {lang:'eg'}, {lang:'fr'}, 'mashed potatoes' ];
Array2 = Array1.map( lang => ({ lang }) );
console.log( Array2 );

答案 1 :(得分:1)
如果你想在可能的情况下使用Array2中的值,你可以这样做:
const Array1 = [ 'en', 'fr', 'eg' ];
const Array2 = [ { lang: 'en' }, { lang: 'eg' } ];
const combined = Array1.map(key =>
Array2.find(obj => obj.lang === key) || { lang: key }
);
答案 2 :(得分:0)
根据我的理解,你有一个数组,其中包含所有可用的lang和对象数组,每个lang都有更多属性,如果我正确的话我建议你将第二个数组保存为对象以防止扫描数组每次都更好地代表数据:
let langWithProps = {
en: {},
fr: {}
...
}
然后你可以这样做:
let langWithProps = {
en: {},
fr: {}
}
const langs = [ 'en', 'fr', 'eg' ];
langs.forEach(function(value) {
if (!langWithProps[value]) {
langWithProps[value] = {Maybe: "you_can_add_other_Attribute"};
}
});
console.log(langWithProps);