var obj = {
a: [ 15, 23, 36, 49, 104, 211 ],
b: [ 9, 12, 23 ],
c: [ 11, 17, 18, 23, 38 ],
d: [ 13, 21, 23, 27, 40, 85]
};
我的解决方案是找到最短的数组,并遍历其中的每个项,检查其他数组的索引。
var shortest = {};
var keys = [];
for ( var key in obj ) {
if ( obj.hasOwnProperty( key ) && Array.isArray( obj[ key ] ) ) {
keys.push( key );
if ( !shortest.hasOwnProperty( 'length' ) || obj[ key ].length < shortest.length ) {
shortest.name = key;
shortest.length = obj[ key ].length;
}
}
}
var res = obj[ shortest.name ].filter(function ( v ) {
for ( var i = 0; i < keys.length; i++ ) {
if ( obj[ keys[ i ] ].indexOf( v ) === -1 ) {
return false;
}
return true;
}
};
然而,这似乎效率极低,我正在尝试确定是否有更好的方法,最好不用多次循环。
我认为不可能在小于O(N)
的情况下做到这一点,其中N
是所有数组中的项数。您当前的解决方案效率较低,因为indexof
对于每个数组都是O(N)
,您可以为最短数组中的每个项运行所有的索引。
我认为基于映射的选项应该是O(N)
:
var counts = {};
var keys = Object.keys(obj);
var arr, el;
for (var k = 0; k < keys.length; k++) {
arr = obj[keys[k]];
for (var i = 0; i < arr.length; i++) {
el = arr[i];
if (counts[el] === undefined) {
// new value, start counting
counts[el] = 1;
} else {
// increment count for this value
counts[el]++;
// if we have as many values as keys, we're done
if (counts[el] === keys.length) {
return el;
}
}
}
}
这里有一些警告:
这假定每个数组的数组值都是唯一的。
假设交集中只有一个元素。
https://jsfidle.net/xzfa75og/
我找不到任何关于数学交换和堆栈溢出的问题来回答这个特定问题。这是我发现的最相似的问题,但这个问题构造得太差,答案完全不充分。 我尝试过在谷歌上寻找无济于事。我确实发现了这一点,但这个公式似乎效率低下,因此不够。例如,如果我们取数字21... 现在想象一下找到远大于21的数字的共同因素,例如2,252和4,082...上述方法没有任何效率。 我想做的是找出最有效的方法来找到任何两个数字的所有公因数。
问题内容: 在Java中,从两个字符串数组返回公共元素的最有效方法是什么?我可以用一对for循环来做到这一点,但这似乎并不是很有效。根据对类似SO问题的评论,我能想到的最好的方法是转换为a ,然后应用:) 问题答案: 编辑: 这是单线的: 该IMPL(类AbstractCollection中)遍历,以及用途的说法。将参数转换为a 将导致快速查找,因此a中的循环将尽快执行。 另外,名称暗示它是一个常
问题内容: 我有多个带有字符串值的数组,我想比较它们,只保留 所有 它们之间相同的匹配结果。 给出以下示例代码: 我想产生以下数组,其中包含来自所有给定数组的匹配项: 我知道我可以将所有数组组合在一起,但这只是给我一个包含所有内容以及重复项的数组。是否可以轻松完成此操作而无需诸如underscore.js之类的库的开销? 编辑 我想我应该提到的是,可能存在未知数量的数组,我只是以3为例。 问题答案
我有多个带有字符串值的数组,我想对它们进行比较,并且只保留它们之间相同的匹配结果。 给定此示例代码: 我想生成以下数组,它包含所有给定数组的匹配项: 编辑我想我应该提到可能有未知数量的数组,我只是使用3作为一个例子。
在中,您可以包含一个方法,该方法在或之前调用,那么在Spring中有没有实现相同的方法? 或者更准确地说,在控制器中的每个方法中,我需要确保存在一个实体(在本例中,是一个产品),然后重定向否则,就像这样,那么在Spring中该如何实现呢?注意,我还需要每个方法中可用的产品。