从数组中提取javascript中的公共元素

Extract from arrays the common elements in javascript

本文关键字:元素 javascript 数组 提取      更新时间:2023-09-26

我有一个关于javascript中使用jquery和knockout js的数组的问题。

我的代码中有这样一个结构:

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"}是它们之间唯一的共同点

我希望你能帮我。

你要找的是一个交叉点。我使用了一个名为underscore的库,并使用了我在这里找到的一个漂亮的对象交集。在对象?

这是它工作的小提琴

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);

希望对你有帮助。

干杯!