【问题标题】:How to get equal value from two different array using Lodash如何使用 Lodash 从两个不同的数组中获得相等的值
【发布时间】:2017-10-24 07:57:56
【问题描述】:

我在下面有两个 JSON 数组对象。我想获得匹配的 stdcontinfo JSON 值的标准名称并将其添加到 stdJson 相应的 JSON。

谁能帮我解决这个问题?

var stdJson = [{
        "_id": ObjectId("5923ed1f610be38692e88e4d"),
        "stdname": "Bala",
        "fathername": "Kannappan",
        "mark1": 78.0,
        "mark2": 70.0,
        "mark3": 98.0,
        "mark4": 88.0,
        "mark5": 100.0
    },
    {
        "_id": ObjectId("5923ed99610be38692e88e4e"),
        "stdname": "vetri",
        "fathername": "R",
        "mark1": 38.0,
        "mark2": 40.0,
        "mark3": 48.0,
        "mark4": 28.0,
        "mark5": 50.0
    },
    {
        "_id": ObjectId("5923edf6610be38692e88e4f"),
        "stdname": "kumba",
        "fathername": "K",
        "mark1": 68.0,
        "mark2": 60.0,
        "mark3": 68.0,
        "mark4": 88.0,
        "mark5": 35.0
    },
    {
        "_id": ObjectId("5923ee1a610be38692e88e50"),
        "stdname": "Jagadesh",
        "fathername": "P",
        "mark1": 100.0,
        "mark2": 90.0,
        "mark3": 89.0,
        "mark4": 100.0,
        "mark5": 95.0
    }, {
        "_id": ObjectId("5923ee6b610be38692e88e51"),
        "stdname": "Dayakar",
        "fathername": "R",
        "mark1": 70.0,
        "mark2": 80.0,
        "mark3": 69.0,
        "mark4": 60.0,
        "mark5": 55.0
    }
]

var stdcontinfo = [{
        "_id": ObjectId("592437891a87641edc58547e"),
        "stdname": "dev1",
        "email": "dev1@gmail.com",
        "phnum": 6545645645.0,
        "__v": 0
    },
    {
        "_id": ObjectId("5924ffe6837e5d2224f42e00"),
        "stdname": "Bala",
        "email": "Bala@gmail.com",
        "phnum": 9965148632.0,
        "__v": 0
    },
    {
        "_id": ObjectId("592500371e469423a4f65306"),
        "stdname": "kumba",
        "email": "kumba@gmail.com",
        "phnum": 9962651490.0,
        "__v": 0
    },
    {
        "_id": ObjectId("59250085f02d4c0face17820"),
        "stdname": "vetri",
        "email": "vetri@gmail.com",
        "phnum": 9962651490.0,
        "__v": 0
    },
    {
        "_id": ObjectId("592500c6c6a6af1d6c7c3fa5"),
        "stdname": "Jagadesh",
        "email": "Jagadesh@gmail.com",
        "phnum": 1234567890,
        "__v": 0
    }
]

【问题讨论】:

  • 我的预期输出:var stdJson = [{ "stdname": "Bala", "fathername": "Kannappan", "mark1": 78.0, "mark2": 70.0, "mark3": 98.0 ,“mark4”:88.0,“mark5”:100.0,“email”:“Bala@gmail.com”,“phnum”:9965148632,},{“stdname”:“vetri”,“fathername”:“R”, “mark1”:38.0,“mark2”:40.0,“mark3”:48.0,“mark4”:28.0,“mark5”:50.0,“email”:“vetri@gmail.com”,“phnum”:9962651490,}。 . . ]

标签: json node.js mongoose lodash


【解决方案1】:

通过 lodash,您可以使用其中一种相交函数。未经测试,但会是这样的:

var arrayOfSameObjects = _.intersectionBy(stdcontinfo, stdJson, 'stdname');

找到相同的对象后,您可以将其添加到stdJson

var stdJson = stdJson.concat(arrayOfSameObjects);

参考资料:

https://lodash.com/docs/#intersectionBy

https://lodash.com/docs/#intersectionWith

【讨论】:

    【解决方案2】:

    我认为你在这里不需要 Lodash 只需使用简单的 JS:

    stdJson.forEach(itemA=>{
        let resItem = stdcontinfo.find(itemB=>itemA.stdname === itemB.stdname);
        if(resItem){
            itemA.email = resItem.email;
            itemA.phnum = resItem.phnum;
        }
    });
    

    【讨论】:

      猜你喜欢
      • 2021-09-11
      • 1970-01-01
      • 2016-06-19
      • 2015-01-01
      • 1970-01-01
      • 2017-07-21
      • 1970-01-01
      • 2021-01-17
      • 1970-01-01
      相关资源
      最近更新 更多