0

我对使用 jquery 和淘汰赛 js 的 javascript 中的数组有疑问。

我的代码中有这个结构:

var MyModel = function(model) {
     var self = this;
     self.FirstArray = ko.observableArray(ko.utils.arrayMap(model.FirstArray, function(object){
          return new ArrayObj(object);
     }));

     /*--here's the code that i need to implement--*/
}

var ArrayObj = function(obj){
    var self = this;
    self.VarX = obj.VarX;
    self.SeccondArray = ko.observableArray(ko.utils.arrayMap(obj.SeccondArray, function(seccond){
         return new Object2(seccond);
    }));
}

var Object2 = function(obj2) {
    var self = this;
    self.IdObj2 = obj2.IdObj2;
    self.Name = obj2.Name;
}

问题是我需要另一个数组,这取决于 SeccondArray 中的 Object2 数组之间的共同项目。

在一个例子中,它是这样的:

Array1 = [{IdObj2: 1, Name: "A"},
          {IdObj2: 2, Name: "B"},
          {IdObj2: 3, Name: "C"}]

Array2 = [{IdObj2: 1, Name: "A"},
          {IdObj2: 3, Name: "C"}]

Array3 = [{IdObj2: 3, Name: "C"}]

FirstArray = [{VarX: J, Array1}, 
              {VarX: K, Array2},
              {VarX: L, Array3}]

所以..我需要的数组必须有:

ResultArray = [{IdObj2: 3, Name: "C"}]

因为{IdObj2: 2, Name: "C"}这是他们之间唯一的共同点。

我希望你能帮我解决这个问题。

4

1 回答 1

0

您正在寻找的是一个十字路口。我使用了一个名为 underscore 的库并使用了我在这里找到的一个漂亮的对象交集How to use underscore's "intersection" on objects?

这是它的工作原理

http://jsfiddle.net/sujesharukil/vyguB/

_.intersectionObjects = _.intersect = function(array) {
    var slice = Array.prototype.slice; // added this line as a utility
    var rest = slice.call(arguments, 1);
    return _.filter(_.uniq(array), function(item) {
      return _.every(rest, function(other) {
        return _.any(other, function(element) { return _.isEqual(element, item); });
      });
    });
  };

var Array1 = [{IdObj2: 1, Name: "A"},
          {IdObj2: 2, Name: "B"},
          {IdObj2: 3, Name: "C"}],

Array2 = [{IdObj2: 1, Name: "A"},
          {IdObj2: 3, Name: "C"}],

Array3 = [{IdObj2: 3, Name: "C"}];

var result = _.intersectionObjects(Array1, Array2, Array3);

console.log(result);

希望有帮助。

干杯!

于 2013-03-26T18:54:50.803 回答