【问题标题】:Uderscore: Merge 2 nested Arrays and replace specific field下划线:合并 2 个嵌套数组并替换特定字段
【发布时间】:2017-11-09 19:59:00
【问题描述】:

合并两个数组(“target”、“updater”)并用作第二个更新器,以使用 uderscore 更新第一个数组中的单个字段或某些字段。

arr1 = [{"_id": 1, "name": "Name One", "surname": "Surname One", 
"Addresses": [{"_id": 1, "country":"Country One", "Town": "Town One" }, 
{"_id": 2, "country":"Country Two", "Town": "Town Two" }]
},
{"_id": 2, "name": "Name Two", "surname": "Surname Two", 
"Addresses": [{"_id": 4, "country":"Country Three"}, 
{"_id": 4, "country":"Country Four"}]
}]

arr2 = [{"_id": 2, "name": "Name Two", "surname": "Surname Two", 
"Addresses": [{"_id": 4, "country":"Country Three", "Town": "Town Three" }, 
{"_id": 4, "country":"Country Four", "Town": "Town Four" }]
}]

预期结果:

result = [{"_id": 1, "name": "Name One", "surname": "Surname One", 
"Addresses": [{"_id": 1, "country":"Country One", "Town": "Town One" }, 
{"_id": 2, "country":"Country Two", "Town": "Town Two" }]
},
{"_id": 2, "name": "Name Two", "surname": "Surname Two", 
"Addresses": [{"_id": 4, "country":"Country Three", "Town": "Town Three" }, 
{"_id": 4, "country":"Country Four", "Town": "Town Four" }]
}]

我已经检查了_.map_.extendfindWhere 并尝试了事件_.values(_.extend(_.indexBy(array1, 'field'), _.indexBy(array2, 'field'))),但没有一个给出预期的结果。

【问题讨论】:

    标签: javascript arrays merge underscore.js


    【解决方案1】:

    尝试使用扁平化

    var result0 = _.flatten(_.map(data, '_id'));
    var result1 = _.flatten(_.map(data, 'name'));
    

    ...

    【讨论】:

      【解决方案2】:

      这不是最优的。但是您可以获得正确的格式。而且真的不使用下划线¯\_(ツ)_/¯

      // log func
      function log(name, msg) {
        if (_.isUndefined(msg)) {
          msg = name;
          name = null;
        }
        if (_.isObject(msg)) {
           msg = JSON.stringify(msg, null, 2);
        }
        msg = (name ? name + ': ' : '') + msg;
        $('#content').append($('<p></p>').html(msg));
      }
      var arr1 = [{"_id": 1, "name": "Name One", "surname": "Surname One", 
      "Addresses": [{"_id": 1, "country":"Country One", "Town": "Town One" }, 
      {"_id": 2, "country":"Country Two", "Town": "Town Two" }]
      },
      {"_id": 2, "name": "Name Two", "surname": "Surname Two", 
      "Addresses": [{"_id": 3, "country":"Country Three"}, 
      {"_id": 4, "country":"Country Four"}]
      }]
      
      var arr2 = [{"_id": 2, "name": "Name Two", "surname": "Surname Two", 
      "Addresses": [{"_id": 3, "country":"Country Three", "Town": "Town Three" }, 
      {"_id": 4, "country":"Country Four", "Town": "Town Four" }]
      }]
      var a = _.reduce(_.flatten(_.zip(arr1, arr2)), function (collection, obj) {
          var uniqueObject = _.find(collection, function (item) {
              return (item && item._id) === (obj && obj._id);
          });
          
          if (uniqueObject) {
            uniqueObject.Addresses = _.map(_.values(_.groupBy(obj.Addresses.concat(uniqueObject.Addresses), "_id")), function (value) {
                return _.reduce(value || [], function (a, b) {
                    return _.extend(a, b);
                });
            });
          } else {
          	collection = collection.concat(obj)
          }
          
          return collection;
      }, []);
      log(_.compact(a))
      <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
      <script src="https://cdnjs.cloudflare.com/ajax/libs/underscore.js/1.8.3/underscore.js"></script>
      <div id="content">
      
      </div>

      这将返回

      [
        {
          "_id": 1,
          "name": "Name One",
          "surname": "Surname One",
          "Addresses": [
            {
              "_id": 1,
              "country": "Country One",
              "Town": "Town One"
            },
            {
              "_id": 2,
              "country": "Country Two",
              "Town": "Town Two"
            }
          ]
        },
        {
          "_id": 2,
          "name": "Name Two",
          "surname": "Surname Two",
          "Addresses": [
            {
              "_id": 3,
              "country": "Country Three",
              "Town": "Town Three"
            },
            {
              "_id": 4,
              "country": "Country Four",
              "Town": "Town Four"
            }
          ]
        }
      ]
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-12-08
        • 1970-01-01
        • 2017-04-24
        • 1970-01-01
        • 1970-01-01
        • 2012-09-20
        相关资源
        最近更新 更多