【问题标题】:Pull out certain elements from two arrays into a separate array将两个数组中的某些元素拉出到一个单独的数组中
【发布时间】:2020-02-16 03:27:02
【问题描述】:

我想按名称比较两个数组,然后只从第二个数组(newLogins)中提取登录值大于第一个数组(oldLogins)的数组。

        const oldLogins = [
            { name: 'Anna', login: 0 },
            { name: 'Bob', login: 0 },
            { name: 'Sveta', login: 0 },
        ];

        const newLogins = [
            { name: 'Romeo', login: 1 },
            { name: 'Bob', login: 1 },
            { name: 'Sveta', login: 2 },
            { name: 'Jhon', login: 0 },
        ];
        // Thought it would work..
        const whoIsLogin = oldLogins.filter(function(item) {
            return newLogins[item.name].login > item.login;
        });

        console.log(whoIsLogin);

我想得出这样的结论:

        const whoIsLogin = [
            { name: 'Bob', login: 1 },
            { name: 'Sveta', login: 2 },
        ];

我该怎么做?谢谢!

【问题讨论】:

    标签: javascript arrays object filtering discord.js


    【解决方案1】:

    您可以使用Map 并过滤第二个数组。

    var oldLogins = [{ name: 'Anna', login: 0 }, { name: 'Bob', login: 0 }, { name: 'Sveta', login: 0 }],
        newLogins = [{ name: 'Romeo', login: 1 }, { name: 'Bob', login: 1 }, { name: 'Sveta', login: 2 }, { name: 'Jhon', login: 0 }],
        map = oldLogins.reduce((m, { name, login }) => m.set(name, login), new Map),
        result = newLogins.filter(({ name, login }) => login > map.get(name));
    
    console.log(result);

    【讨论】:

      【解决方案2】:

      我刚刚用 find 方法更新了你的逻辑。

      const oldLogins = [
                  { name: 'Anna', login: 0 },
                  { name: 'Bob', login: 0 },
                  { name: 'Sveta', login: 0 },
              ];
      
              const newLogins = [
                  { name: 'Romeo', login: 1 },
                  { name: 'Bob', login: 1 },
                  { name: 'Sveta', login: 2 },
                  { name: 'Jhon', login: 0 },
              ];
              // It should work now
              const whoIsLogin = newLogins.filter(function(item) {
                  const oldLogin = oldLogins.find(oItem=>oItem.name===item.name)
                  return oldLogin && oldLogin.login < item.login;
              });
      
              console.log(whoIsLogin);

      【讨论】:

        【解决方案3】:

        你可以检查一下

        const oldlogins =[
          {name:"Anna",login:0},{name:"Bob",login:0},{name:"Sb",login:0}
        ]
        const newlogins =[
          {name:"rom",login:1},{name:"Bob",login:1},{name:"Sb",login:2},{name:"Jhon",login:0}
        ]
        
        let result =newlogins.filter((nitem,nindex)=>oldlogins.length-1>=nindex&&oldlogins[nindex].name===nitem.name&&oldlogins.length-1>=nindex&&oldlogins[nindex].login<nitem.login)
        
        console.log(result)

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2020-01-31
          • 2014-02-23
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2013-11-08
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多