Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/logging/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 这个迭代可以用更好的方法完成吗?_Javascript - Fatal编程技术网

Javascript 这个迭代可以用更好的方法完成吗?

Javascript 这个迭代可以用更好的方法完成吗?,javascript,Javascript,这是我对一个关于用数组中的项填充对象的研究问题的初步解决方案。。。 但似乎应该有更好的解决办法。我读到“for…in”不是正确的方法,但是有没有更好的方法我忘了呢 var doubler = function(arr) // fills object with numbers and their doubled value { var my_obj = {}; for(var i=0; i<arr.length; i++) { my_obj[arr[

这是我对一个关于用数组中的项填充对象的研究问题的初步解决方案。。。 但似乎应该有更好的解决办法。我读到“for…in”不是正确的方法,但是有没有更好的方法我忘了呢

var doubler = function(arr) // fills object with numbers and their doubled value
{
    var my_obj = {};
    for(var i=0; i<arr.length; i++)
    {
        my_obj[arr[i]] = arr[i]*2;     
    }
console.log(my_obj);
}

doubler([5,7,2,3,4,7])
var doubler=function(arr)//用数字及其加倍值填充对象
{
var my_obj={};

对于(var i=0;i您的代码很好,速度也很快。我只建议缓存arr.length:

for(var i=0, len=arr.length; i<len; i++)

您的代码很好,速度很快。我只建议缓存arr.length:

for(var i=0, len=arr.length; i<len; i++)
为了好玩,请使用:

reduce
获取一个数组和一个初始值(
{}
),然后依次对数组的每个值和上一次迭代的结果执行一些操作(其中[0]和
{}
用于第一次迭代)

我在这里稍微滥用了它,造成了副作用(对对象的赋值),只是获取初始对象(
o=={}
),并在每次迭代中返回相同的(修改过的)对象

reduce
更惯用的用法是:

function addUp(a) {
    return a.reduce(function(running_total, n) {
        return running_total + n;
    }, 0);  // 0 is actually the default value
}
为了好玩,请使用:

reduce
获取一个数组和一个初始值(
{}
),然后依次对数组的每个值和上一次迭代的结果执行一些操作(其中[0]和
{}
用于第一次迭代)

我在这里稍微滥用了它,造成了副作用(对对象的赋值),只是获取初始对象(
o=={}
),并在每次迭代中返回相同的(修改过的)对象

reduce
更惯用的用法是:

function addUp(a) {
    return a.reduce(function(running_total, n) {
        return running_total + n;
    }, 0);  // 0 is actually the default value
}

首先,我喜欢总是为当前数组元素声明一个变量:

for(/*...*/){
   var x = arr[i];
   /*...*/
}
这没什么大不了的,但它让我不用反复输入arr[i]。除此之外,您当前的代码非常好,可能唯一需要更改的是性能的微小改进,比如缓存数组长度

这样说,你可以考虑的是使用迭代器函数代替for循环:

arr.forEach(function(x, i){
   my_obj[x] = x*2;
});
这样做的优点是可以自动创建词汇范围的循环变量,并且不必多次引用数组(如果数组是表达式而不仅仅是变量引用,则非常有用)


这种方法最重要的警告是,不能像在常规循环中那样对控制流使用break、continue和return。此外,调用额外的函数会带来一点性能损失,而且一些旧浏览器不支持内置的数组迭代方法,因此需要使用shim或library函数相反。

首先,我喜欢总是为当前数组元素声明一个变量:

for(/*...*/){
   var x = arr[i];
   /*...*/
}
这没什么大不了的,但它让我不用反复输入arr[i]。除此之外,您当前的代码非常好,可能唯一需要更改的是性能的微小改进,比如缓存数组长度

这样说,你可以考虑的是使用迭代器函数代替for循环:

arr.forEach(function(x, i){
   my_obj[x] = x*2;
});
这样做的优点是可以自动创建词汇范围的循环变量,并且不必多次引用数组(如果数组是表达式而不仅仅是变量引用,则非常有用)


这种方法最重要的警告是,不能像在常规循环中那样对控制流使用break、continue和return。此外,调用额外的函数会带来一点性能损失,而且一些旧浏览器不支持内置的数组迭代方法,因此需要使用shim或library函数相反。

这个问题似乎离题了,因为它要求改进现有的工作代码;它可能属于codereview.stackexchange.comAleks,关于这一点,什么应该离题?问题中的代码只说明了要解决的问题类型,而Alnitak的回答提供了必要的步骤e的意图不是“这段代码有效吗?”,而是“我应该学习什么新方法才能将其提升到下一个层次?”。这个问题似乎离题了,因为它要求改进现有的工作代码;它可能属于codereview.stackexchange.comAleks,关于这个问题什么应该离题?问题中的代码只说明了要解决的问题类型,而Alnitak的回答提供了必要的步骤。目的是不是“这段代码行得通吗?”,而是“我应该学习什么新方法才能将其提升到下一个层次?”.这就是我刚才说的时髦的东西。现在我得去看看那些花括号是怎么回事了end@dwilbank我刚刚添加了一些注释,应该可以解释一下-它们是
o
@dwilbank FWIW的初始值,这可能不是世界上最快的代码,但我确实喜欢那些“函数式编程”数组上的样式方法:)谢谢。现在我必须找到一个关于reduce的清晰完整的教程。这是迄今为止最好的一个?@dwilbank不是一个很好的例子,因为它不是
reduce
的标准版本。我在上面添加了更多的解释。这就是我所说的时髦的东西。现在我必须去看看下面那些花括号是关于什么的end@dwilb我刚才已经添加了一些注释,应该解释一下-它们是
o
@dwilbank FWIW的初始值,这可能不是世界上最快的代码,但我确实喜欢那些“函数式编程”数组上的样式方法:)谢谢。现在我必须找到一个关于reduce的清晰完整的教程。这是迄今为止最好的一个?@dwilbank不是一个很好的例子,因为它不是
reduce
的标准版本。我在上面添加了更多的解释。谢谢。现在我必须去学习了!@dwilbank:my-the-way,大多数Javascript库(下划线等)应该包含这些迭代器函数,这样您就不必自己实现它们了