我想在Array.prototype和Object.prototype上定义辅助方法.我目前的计划是做类似的事情:
Array.prototype.find = function(testFun) {
// code to find element in array
};
Run Code Online (Sandbox Code Playgroud)
所以我可以这样做:
var arr = [1, 2, 3];
var found = arr.find(function(el) { return el > 2; });
Run Code Online (Sandbox Code Playgroud)
它工作正常,但如果我在循环中循环数组,for in方法显示为值:
for (var prop in arr) { console.log(prop); }
// prints out:
// 1
// 2
// 3
// find
Run Code Online (Sandbox Code Playgroud)
这将搞砸任何依赖于for in显示值的人(尤其是对象).更高版本的javascript具有内置于数组中的.map和.filter函数,但这些函数不会出现在for in循环中.如何创建更多不会出现在for in循环中的方法?
是否可以对位于A房间和B房间的名称空间的所有用户进行socket.io广播,而不是那些只在A房间或B房间的用户?
如果没有,我将如何自己实施?有没有办法检索位于给定房间的命名空间中的所有用户?
我在节点中使用socket.io 1.0
编辑:如果没有本机方法,我将如何创建自己的语法,如:
socket.broadcast.in('room1').in('room2').emit(...)?
可能重复:
javascript中数组交集的最简单代码
假设我有阵列:
[0,1]
Run Code Online (Sandbox Code Playgroud)
和
[1,2,3]
Run Code Online (Sandbox Code Playgroud)
我需要验证这些数组是否具有公共元素,对于这种情况,它将是 1
使用jQuery我按照以下方式检查:
1.获取第一个数组的长度
2.获取第二个数组的长度
3.合并数组
4.获取合并数组的长度
5.如果合并数组的长度不等于2个初始数组,那么它们有共同的元素
一行代码是:
(event2Zone[0].length+event2Zone[1].length)==$.unique($.merge(event2Zone[0].zo,event2Zone[1].zo)).length
Run Code Online (Sandbox Code Playgroud)
是否有更标准或更优雅的方式来执行相同的操作?
var array1 = [1, 2, 3, 4, 5, 6];
var array2 = [1, 2, 3, 4, 5, 6, 7, 8, 9];
Run Code Online (Sandbox Code Playgroud)
我有两个像上面这样的数组.现在我想在MVC 4中使用jQuery执行以下操作.
如果两个数组的每个元素相等,则显示消息/警报.例如"所有记录已经存在."
如果两个数组的每个元素都不同,那么只需将它们全部添加到"VAR"中,例如var resultset = ....(将存储7,8,9)
如果两个数组之间通用的元素很少,那么公共元素显示带元素的消息,例如"记录1,2,3,4,5,6已经存在"并在"VAR"中添加不同的元素,例如var resultset = ....(其中7 ,8,9将存储).消息和差异元素集合都将同时执行.
我有各种字符串比较和差异算法,但在某些时候,在我应用它们之前,我想找到两个字符串是否至少有一个共同的字符.这样我就可以跳过更复杂的功能.所以我需要一个非常快速的JavaScript函数来查找字符串A和字符串B是否至少有一个共同字符.
首先,我想为字符串A创建一个字符映射,然后检查字符串B中的每个字符对着该映射,直到找到某些内容.但后来我才意识到,如果两个字符串都很大并且它们有一个共同的第一个字符,那么为字符串A创建一个完整的映射效率会很低.
更新:有人回答使用indexOf(),这让我感到困惑.也许短语"有共同的字符"意味着"字符串是另一个字符串"是一样的吗?让我举一个我想要的例子:
例如JavaScript,Stop and stay有一个S共同的角色.其他例子是please look right,break the ice他们有一个k共同的性格.
我一直在尝试实现一个给出两个数组的函数,
array1的元素用作过滤掉array2中元素的条件.
例如:
array1= [apple, grapes, oranges]
array2= [potato, pears, grapes, berries, apples, oranges]
Run Code Online (Sandbox Code Playgroud)
在加入函数之后,array2应该有这样的元素:
filter_twoArrays(array1,array2)
array2= [grapes, apples, oranges]
Run Code Online (Sandbox Code Playgroud)
我尝试了下面的代码,使用for循环和array.splice(),但我看到的问题是,当我使用splice方法时,似乎它改变了for循环中array2的长度:
function filter_twoArrays(filter,result){
for(i=0; i< filter.length; i++){
for(j=0; j< result.length; j++){
if(filter[i] !== result[j]){
result.splice(j,1)
}
}
}
Run Code Online (Sandbox Code Playgroud)
如何优化过滤功能将非常感谢任何输入
干杯!
我尝试将所有相同的数据值放入对象数组。这是我的输入:
var a = [{
name: "Foo",
id: "123",
data: ["65d4ze", "65h8914d"]
},
{
name: "Bar",
id: "321",
data: ["65d4ze", "894ver81"]
}
]
Run Code Online (Sandbox Code Playgroud)
我需要一个类似的结果:
["65d4ze"]
Run Code Online (Sandbox Code Playgroud)
我尝试在我的对象上循环以获取此输出,但是我完全迷失了……我不知道如何知道结果是否进入所有数据数组。
["65d4ze"]
Run Code Online (Sandbox Code Playgroud)
我在JavaScript中遇到了问题.
我有两个数组,我想检查它们是否在某些元素上相交,然后删除这些元素并返回没有相交元素的新数组.
例如:
Array A (
[0] => 0 [1] => 1
)
Array B (
[0] => 2 [1] => 1
)
Run Code Online (Sandbox Code Playgroud)
我想检查一下并返回:
Array result (
[0] => 0 [1] => 2
)
Run Code Online (Sandbox Code Playgroud)
我怎么能用JavaScript做到这一点?
我已经编写了一段工作正常的代码.我想要一个新的数组,该数组由来自myArr的元素按orderArr中指定的顺序组成.但是,它在另一个for循环中使用for循环来匹配数组元素.
var myArr = ['a', 'b', 'c', 'd', 'e'];
var orderArr = ['e', 'c'];
var reArr = [];
for (var i = 0; i < orderArr.length; i++) {
for (var k = 0; k < myArr.length; k++) {
if (myArr[k] == orderArr[i]) {
reArr.push(myArr[k]);
}
}
}
console.log(reArr);Run Code Online (Sandbox Code Playgroud)
我经常听说在另一个for循环中使用for循环是不好的做法,即使每个都应该避免.
我怎么能重写这段代码.
我之前发布过这个问题为jquery/javascript:arrays - jquery/javascript:arrays.但由于我是一个完整的初学者,我已经提出错误的问题,也不理解答案...... :(
在未能实现给定的解决方案之后,我做了一些更多的研究,我发现我需要比较6个可能选择的数组并将它们相交以最终只显示重叠值.
所以希望这是一个更清晰的表述:
我有6个问题/ 6组单选按钮的答案.每个答案都有多个值(它们可以在最终的"建议"中显示1到38个项目).我正在收集数组中已检查无线电的值.我得到6个数组.
我如何交叉6个数组,以便从一个包含所有6个选项的交叉值中获得一个最终数组?如何将此最终数组的项目转换为选择器?
有人可以帮帮我吗?谢谢!
我的脚本现在看起来像:
(function($){
$.fn.checkboxval = function(){
var outArr = [];
this.filter(':checked').each(function(){
outArr.push(this.getAttribute("value"));
});
return outArr;
};
})
(jQuery);
$(function(){
$('#link').click(function(){
var valArr1 = $('#vraag1 input:radio:checked').checkboxval();
var valArr2 = $('#vraag2 input:radio:checked').checkboxval();
var valArr3 = $('#vraag3 input:radio:checked').checkboxval();
var valArr4 = $('#vraag4 input:radio:checked').checkboxval();
var valArr5 = $('#vraag5 input:radio:checked').checkboxval();
var valArr6 = $('#vraag6 input:radio:checked').checkboxval();
// var newArray = $.merge(valArr1, valArr2, valArr3, valArr4, valArr5, valArr6); <- test to see if I can merge them
// …Run Code Online (Sandbox Code Playgroud)