相关疑难解决方法(0)

JavaScript for ... in vs for

你认为for in和for循环有很大的不同吗?您更喜欢使用什么样的"for"?为什么?

假设我们有一组关联数组:

var myArray = [{'key': 'value'}, {'key': 'value1'}];
Run Code Online (Sandbox Code Playgroud)

所以我们可以迭代:

for (var i = 0; i < myArray.length; i++)
Run Code Online (Sandbox Code Playgroud)

和:

for (var i in myArray)
Run Code Online (Sandbox Code Playgroud)

我没有看到很大的不同.有任何性能问题吗?

javascript

455
推荐指数
11
解决办法
29万
查看次数

为什么lodash.each比原生forEach更快?

我试图找到运行具有自己范围的for循环的最快方法.我比较的三种方法是:

var a = "t,t,t,t,t,t,t,t,t,t,t,t,t,t,t,t,t,t,t,t,t,t,t,t,t,t,t,t,t,t,t,t,t,t,t,t,t,t,t,t,t,t,t,t,t,t,t,t,t,t".split();

// lodash .each -> 1,294,971 ops/sec
lodash.each(a, function(item) { cb(item); });

// native .forEach -> 398,167 ops/sec
a.forEach(function(item) { cb(item); });

// native for -> 1,140,382 ops/sec
var lambda = function(item) { cb(item); };
for (var ix = 0, len = a.length; ix < len; ix++) {
  lambda(a[ix]);
}
Run Code Online (Sandbox Code Playgroud)

这是在OS X上的Chrome 29上.您可以在此处自行运行测试:

http://jsben.ch/BQhED

Lodash的.each速度几乎是原生的两倍.forEach?而且,它比平原更快for?巫术?黑魔法?

javascript performance lodash

66
推荐指数
4
解决办法
8万
查看次数

在JavaScript数组中所有元素之间穿插元素的方法是什么?

假设我有一个数组var arr = [1, 2, 3],我想用元素分隔每个元素,例如.var sep = "&",所以输出是[1, "&", 2, "&", 3].

考虑它的另一种方法是我想做Array.prototype.join(arr.join(sep))而不是结果是一个字符串(因为我试图使用的元素和分隔符是对象,而不是字符串).

有没有一种功能性/漂亮/优雅的方式来做es6/7或lodash没有像笨重的东西:

_.flatten(arr.map((el, i) => [el, i < arr.length-1 ? sep : null])) // too complex
Run Code Online (Sandbox Code Playgroud)

要么

_.flatten(arr.map(el => [el, sep]).slice(0,-1) // extra sep added, memory wasted
Run Code Online (Sandbox Code Playgroud)

甚至

arr.reduce((prev,curr) => { prev.push(curr, sep); return prev; }, []).slice(0,-1)
// probably the best out of the three, but I have to do a map already
// and I still have the …
Run Code Online (Sandbox Code Playgroud)

javascript arrays ecmascript-6 lodash

18
推荐指数
4
解决办法
4070
查看次数

Javascript:for..in循环运行的次数比预期的多

在以下代码中,user.roles的实际长度为1.但是,循环运行两次.

当我输出i的值时,它会在第二次迭代时显示为"diff".切换到普通for循环解决了这种情况.但是,我想知道for..in循环的问题是什么.

 for (var i in user.roles) {
                if (user.roles[i].school.equals(schoolId)) {
                    for (var j in user.roles[i].permissions) {
                        for (var k in accessType) {
                            if (user.roles[i].permissions[j].feature == featureKey) {
                                if (user.roles[i].permissions[j][accessType[k]]) {
                                    return true;
                                }
                            }
                        }
                    }
                }
            }
Run Code Online (Sandbox Code Playgroud)

更新:user是一个对象,而角色是一个对象数组.导致该问题的角色实例如下所示:

{
  "_id": "582d3390d572d05c1f028f53",
  "displayName": "Test Teacher Attendance",
  "gender": "Male",
  "roles": [
    {
      "_id": "57a1b3ccc71009c62a48a684",
      "school": "57a1b3ccc71009c62a48a682",
      "role": "Teacher",
      "__v": 0,
      "designation": true,
      "permissions": [
        {
          "feature": "User",
          "_id": "57ac0b9171b8f0b82befdb7d",
          "review": false,
          "view": true,
          "delete": false,
          "edit": false,
          "create": …
Run Code Online (Sandbox Code Playgroud)

javascript arrays for-loop node.js

6
推荐指数
1
解决办法
587
查看次数

一旦发现,如何停止循环?

如果three找到,那么它应该返回true并停止迭代.否则返回false如果找不到则返回false.

我正在使用filter()- 这是错误的使用方法吗?

var data = [
  'one',
  'two',
  'three',
  'four',
  'three',
  'five',
];

found = data.filter(function(x) {
   console.log(x);
   return x == "three";
});

console.log(found);
Run Code Online (Sandbox Code Playgroud)

演示:https://jsbin.com/dimolimayi/edit?js,console

javascript

6
推荐指数
1
解决办法
580
查看次数