【问题标题】:Update collection object using Underscore / Lo-dash使用 Underscore / Lo-dash 更新集合对象
【发布时间】:2013-08-12 21:44:17
【问题描述】:

我有两个对象集合。我遍历集合 A,我希望当 A 中的 ObjectId 与 B 中的 ObjectId 匹配时,更新集合 B 中的该对象。

这是我目前得到的:

   var exerciseIds = _(queryItems).pluck('ExerciseId').uniq().valueOf();
        var item = { Exercise: null, ExerciseCategories: [] };
        var exerciseAndCategories = [];

        //this part works fine
        _.forEach(exerciseIds, function(id) {
            var temp = _.findWhere(queryItems, { 'ExerciseId': id });
            item.Exercise = temp.Exercise;
            exerciseAndCategories.push(item);
        });

        //this is problem
        _.forEach(queryItems, function (i) {
            _(exerciseAndCategories).where({ 'ExerciseId': i.ExerciseId }).tap(function (x) {
                x.ExerciseCategories.push(i.ExerciseCategory);
            }).valueOf();
        });

编辑

链接到Fiddle

【问题讨论】:

    标签: javascript underscore.js lodash


    【解决方案1】:

    试试这个:

    var exerciseIds = _(queryItems).pluck('ExerciseId').uniq().valueOf();
    var item = {
        Exercise: null,
        ExerciseCategories: []
    };
    var exerciseAndCategories = [];
    
    //this part works fine
    _.forEach(exerciseIds, function (id) {
        var temp = _.findWhere(queryItems, {
            'ExerciseId': id
        });
        var newItem = _.clone(item);
        newItem.Exercise = temp.ExerciseId;
        exerciseAndCategories.push(newItem);
    });
    
    //this is problem
    _.forEach(queryItems, function (i) {
        _(exerciseAndCategories).where({
            'Exercise': i.ExerciseId
        }).tap(function (x) {
            return _.forEach(x, function(item) {
                item.ExerciseCategories.push(i.ExerciseCategory);
            });
        }).valueOf();
    });
    
    // exerciseAndCategories = [{"Exercise":1,"ExerciseCategories":["biking","cardio"]},{"Exercise":2,"ExerciseCategories":["biking","cardio"]}]
    

    主要问题是 tap 返回数组,而不是每个项目,因此您必须在其中使用 _.forEach

    FIDDLE

    【讨论】:

    • 没有帮助,当我写这行代码时:logger.log(exerciseAndCategories);,我可以看到ExerciseCategories: 仍然是空的,所以集合exactAndCategories 没有更新
    • 用小提琴更新。需要return 来自tap
    • 感谢小提琴,但我没有得到预期的结果,也许我的问题不够清楚,我已经编辑了你的小提琴位并添加了关于我希望结果看起来如何的评论跨度>
    • @hyperN 你希望最终的数组是什么样子的?像这样:[{"Exercise":1,"ExerciseCategories:["bike","cardio"]},{"Exercise":2,"ExerciseCategories:["bike","cardio"]}?如果是这样的话,我将在一些更新中为您提供。
    猜你喜欢
    • 1970-01-01
    • 2014-12-19
    • 1970-01-01
    • 2018-05-18
    • 1970-01-01
    • 2016-08-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多