是否存在与两个数组相交的JS或jQuery函数,例如:
var array1 = [1,2,3,4,5];
var array2 = [2,4,8,9,0];
var result = someFun(array1, array2);
//result = [2,4];
Run Code Online (Sandbox Code Playgroud)
我确定我可以手动制作,但可能存在更短的方式.
我有两个数组,available_items和requested_items.我想删除requested_items中缺少的元素available_items.使用forEach显然不会给出预期结果,因为即使删除了一个元素并且下一个元素具有旧索引,内部索引也会递增.
这是一个测试用例(也在这个jsbin中):
var available_items = [2, 5, 9, 36, 48, 23];
var requested_items = [5, 12, 49, 30, 90, 17];
requested_items.forEach(function(v, i, a) {
if(available_items.indexOf(v) == -1) {
console.log("will remove " + i + ' ' + v);
a.splice(i, 1);
} else console.log("will keep " + i + ' ' + v);
});
console.log('Resulting request array is ' + requested_items.toString());
Run Code Online (Sandbox Code Playgroud)
结果是:
"will keep 0 5"
"will remove 1 …Run Code Online (Sandbox Code Playgroud) 可能重复:
javascript中数组交集的最简单代码
我正在用mongodb和nodejs编写一个应用程序.我有一个'学生'集合,其中包含一个列表,其中列出了所有课程(课程ID,指的是'课程'集合中的文档),特定学生已经学习.
我有2名学生,StudentA和StudentB.我想看看这两个学生是否参加过任何共同课程.
我已经从mongodb检索了studentA和studentB文档.我想在node.js应用程序中找到这两个数组之间的交集.
我想到的一种方法是通过第一个数组,创建一个以objectid为键的哈希映射.然后通过第二个数组并尝试将值递增1.最后,值为1的所有条目都是相交元素.
有更好的方法吗?
请告诉我.
-su
假设我有一个基于any的DOM元素数组 selector
var elems = document.querySelectorAll(selector);
Run Code Online (Sandbox Code Playgroud)
我不知道包含了什么elems,但让我们假设elems.length > 0
我想使用querySelectorAll(或一些等效函数)elems来查找与其他选择器匹配的所有元素.
// example: find all buttons with class `foo` within `elems` array
var buttons = elems.querySelectorAll("button.foo");
Run Code Online (Sandbox Code Playgroud)
这不起作用(显而易见的原因),但我不确定如何做到这一点:(
这是我创建的包装器,用于处理@Tibos接受的答案
// Element.matches wrapper
(function(e){
if (typeof e.matches !== "function") {
e.matches = e.webkitMatchesSelector ||
e.mozMatchesSelector ||
e.msMatchesSelector ||
e.oMatchesSelector ||
e.matchesSelector;
}
})(Element.prototype);
Run Code Online (Sandbox Code Playgroud) 试图让两个数据集相交但我不能这样做:(例如,在我的下面的代码中,相交mySet和mySet2应该产生"1",因为它们的集合中都有值"1".
var mySet = new Set();
var mySet2=new Set();
mySet.add(1);
mySet.add(2);
mySet.add("HELLOOOOO");
mySet2.add("hi");
mySet2.add(1);
var a = Array(mySet, mySet2);
console.log(a);
mySet.forEach(function(value) {
console.log(value);
});
mySet2.forEach(function(value) {
console.log(value);
});
function intersection_destructive(a, b)
{
var result = new Array();
while( mySet.length > 0 && mySet2.length > 0 )
{
if (mySet[0] < mySet2[0] ){ mySet.shift(); }
else if (mySet[0] > mySet2[0] ){ mySet2.shift(); }
else /* they're equal */
{
result.push(mySet.shift());
mySet2.shift();
}
}
return result;
}
Run Code Online (Sandbox Code Playgroud)
Set 1和Set 2都有"1"但我的函数(intersection_destructive)不返回它.我不确定如何交叉它们,我搜索stackoverflow并找到intersection_destructive,但它对我不起作用,我也尝试过:
array1.filter(function(n) { …Run Code Online (Sandbox Code Playgroud) 这是一个亚马逊的采访问题,我的回答是
function intersection ( A , B )
{
var C = [];
for ( var a in A ) if ( B.indexOf(a) != -1 ) C.push(a);
return C;
}
Run Code Online (Sandbox Code Playgroud)
他问复杂的顺序是什么,我说,我引用的是,
O(m*n)其中m = A.length,n = B.length
并且他说有更好的方法可以做到这一点我就像WTF ??????? 他说使用A和B对象和我一样
"但你说这些是阵列那是你的问题!!!!"
有人可以帮帮我吗?
我的 javascript 代码中有几个数组(我也在使用淘汰赛 js),我想获得一个仅包含所有数组的公共对象的数组。
我的代码是这样的:
Array1 = [{a: 1, b: 'something'}, {a: 2, b: 'something1'},{a: 3, b: 'something3'}];
Array2 = [{a: 3, b: 'something3'}, {a: 1, b: 'something'}, {a: 4, b: 'something4'}]
Array2 = [{a: 3, b: 'something3'}, {a: 1, b: 'something'}, {a: 5, b: 'something5'}]
Run Code Online (Sandbox Code Playgroud)
所以,从这个数组中,我想把所有的共同点放到一个数组中,所以结果是这样的:
Array4 = [{a: 1, b: 'something'}, {a: 3, b: 'something3'}]
Run Code Online (Sandbox Code Playgroud)
我不得不提到 Array1、Array2 和 Array3 位于另一个数组中,如下所示:
Array0 = [Array1, Array2, Array3];
Run Code Online (Sandbox Code Playgroud)
希望你能帮我解决这个问题,谢谢!
我的角度控制器中有以下内容
MyUserService.getUserRoles().then(function (data) {
var userInValidRole = false;
var role1 = "Role1";
var role2 = "Role2";
if ((data.indexOf(role1) > -1) || data.indexOf(role2 ) > -1) {
userInValidRole = true;
}
Run Code Online (Sandbox Code Playgroud)
这是按预期工作的.但是我希望做的事情如下:
var validRoles = ["Role1", "Role"];
Run Code Online (Sandbox Code Playgroud)
然后检查
if ((data.indexOf(validRoles) > -1)) {
userInValidRole = true;
}
Run Code Online (Sandbox Code Playgroud)
然而,它没有按预期工作 - 有什么我做错了吗?
最近我有一个面试问题如下:让我们考虑我们有两个不同长度的排序数组.需要在两个数组中找到共同的元素.
var a=[1,2,3,4,5,6,7,8,9,10];
var b = [2,4,5,7,11,15];
for(var i=0;i<a.length;i++){
for(var j=0;j<b.length;j++){
if(a[i]==b[j]){
console.log(a[i],b[j])
}
}
}
Run Code Online (Sandbox Code Playgroud)
我上面写的是这样的.采访者说现在假设有2000个元素,b有3000个元素.那么你如何以更有效的方式写作?
请用示例代码解释您的答案.所以我可以更清楚地理解.
有三个数组:
var items = Array(523,3452,334,31,5346);
var items_used = Array(3452,31,4123);
var items_new = Array();
Run Code Online (Sandbox Code Playgroud)
第一个是通用的,第二个是当前正在使用的项目.第三个包括第一个数组中的所有项目,第二个没有提到.
如何从第一个数组项中删除,在第二个数组中使用,并将结果写入第三个数组?
我们应该得到items_new = Array(523, 334, 5346).3452并被31删除,因为它们在第二个数组中提到.
我正在编写一个 Ionic 应用程序 - 所以这是 Angular 1.x 中的
我有两个数字数组:
var arr1 = [1,32,423,43,23,64,232,5,67,54];
var arr2 = [11,32,1423,143,123,64,2232,35,467,594];
Run Code Online (Sandbox Code Playgroud)
数组中有两个常见的数字32和64。
如果 2 个数组中至少有 1 个公共数字,我希望某些 JavaScript 能够有效地返回 true。
我有以下代码
angular.forEach(arr1 , function (arr1 , count) {
if ( inArray(arr1 , arr2) )
{
return true;
}
});
Run Code Online (Sandbox Code Playgroud) 我需要一种更快的方法从另一个数组中存在的数组中获取所有相同的元素。
我有两个带有 Date 对象(> 100k 元素)的非常大的数组(A 和 B)。数组 B 包含数组 A 中元素的子集。我需要过滤数组 A 中包含在数组 B 中的元素。那么,为什么不直接使用数组 B?我需要保留来自数组 A 的引用。
目前我正在使用此代码:
const A = [];
const B = [];
const result = A.filter((s) => {
return B.indexOf(s) !== -1;
});Run Code Online (Sandbox Code Playgroud)
这种方式相当缓慢。使用我的阵列执行该操作需要超过 2 分钟。
将是一个非常简单的问题,
我有这两个数组:
var pcNumbers = [1,2,3,4,5];
var userNumbers = [1,2,7,8,9];
Run Code Online (Sandbox Code Playgroud)
实际上,我必须找到一种方法来创建一个警报,提示“有两个共同元素,1 和 2”
蒂亚
javascript ×13
arrays ×6
algorithm ×3
jquery ×3
angularjs ×2
compare ×1
dom ×1
ecmascript-6 ×1
element ×1
html ×1
mongodb ×1
node.js ×1
optimization ×1
performance ×1
set ×1