【问题标题】:How can i Compare two Arrays, which don't have Same lenght in javascript?我如何比较两个在javascript中长度不同的数组?
【发布时间】:2018-03-27 22:33:28
【问题描述】:

我有两个数组 Array1 和 Array2,我想比较它们,就像它们遵循以下三个规则

第一件事:

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 应该变成

 Result=[{lang:en},{lang:fr},{lang:eg}]

【问题讨论】:

  • somevalue 来自哪里?
  • @CertainPerformance 它将是我可以推送的任何对象
  • 那么,只需覆盖Array1 = Array2? (可能带有副本)
  • 数组有特定的顺序吗?
  • 是的 Array1 有特定的顺序意味着它会相同,但 Array2 会随时间变化并进行比较

标签: javascript arrays arraylist data-structures


【解决方案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 );

【讨论】:

  • 我认为他希望仅在 array2 中找到的值也能保留...
【解决方案2】:

如果您想尽可能使用 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 }
);

【讨论】:

  • 我认为他希望仅在 array2 中找到的值也能保留...
  • @Michael 如果我理解正确,那么应该这样做,如果在第二个数组中找不到一个新对象,它只会添加一个新对象。本质上优先考虑 Array2 作为“真相的来源”。
  • 是的,我认为这可能是 OP 想要的。虽然还很不清楚。
  • 它还保留了第一个数组的顺序,只是看到了 OP 的注释。
【解决方案3】:

据我了解,您有一个包含所有可用语言的数组和具有每个语言更多属性的对象数组,如果我是正确的,我建议您将第二个数组保存为对象以防止每次扫描数组并更好地表示数据:

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);

【讨论】:

    猜你喜欢
    • 2013-04-02
    • 2011-12-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-02-25
    • 2019-02-28
    相关资源
    最近更新 更多