2013-03-26 86 views
0

我有一个关于使用jquery和knockout js的javascript中数组的问题。从数组中提取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的对象2阵列之间的项目。

在例子中,它是这样的:

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"}这是他们之间唯一的常见的。

我希望你能帮助我。

+0

我不知道为什么这个用户编辑我的问题只是为了删除“谢谢!”..我认为堆栈溢出值得太多感谢用户,他们不应该被删除..这就是我的想法。谢谢! – 2013-03-26 18:11:55

回答

0

您正在寻找的是一个十字路口。我用了一个库调用下划线并用一记漂亮的对象交叉路口我发现这里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); 

希望有所帮助小提琴。

干杯!

+0

这与数组1,2和3,但如果我有一个单一的数组中的所有值呢?此方法不起作用..:/ – 2013-03-26 20:27:54

+0

我认为你的要求是从多个数组中找到常见的一个。所以如果所有的值都在一个数组中而其他的都是空的,那么你就赢了;没有交集 – 2013-03-26 20:59:38