相关疑难解决方法(0)

For-each在JavaScript中的数组?

如何使用JavaScript循环遍历数组中的所有条目?

我以为它是这样的:

forEach(instance in theArray)
Run Code Online (Sandbox Code Playgroud)

theArray我的阵列在哪里,但这似乎是不正确的.

javascript arrays iteration foreach loops

4448
推荐指数
33
解决办法
392万
查看次数

对象的映射函数(而不是数组)

我有一个对象:

myObject = { 'a': 1, 'b': 2, 'c': 3 }
Run Code Online (Sandbox Code Playgroud)

我正在寻找一个本机方法,类似于Array.prototype.map将使用如下:

newObject = myObject.map(function (value, label) {
    return value * value;
});

// newObject is now { 'a': 1, 'b': 4, 'c': 9 }
Run Code Online (Sandbox Code Playgroud)

JavaScript是否具有map对象的这种功能?(我想将它用于Node.JS,所以我不关心跨浏览器问题.)

javascript functional-programming node.js map-function

903
推荐指数
16
解决办法
100万
查看次数

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万
查看次数

ES6中的地图与对象,何时使用?

参考:MDN地图

当密钥未知时直到运行时,并且当所有键都是相同类型且所有值都是相同类型时,请使用对象上的映射.

当存在对各个元素进行操作的逻辑时使用对象.

题:

在对象上使用地图的适用示例是什么?特别是"什么时候直到运行时才能知道密钥?"

var myMap = new Map();

var keyObj = {},
    keyFunc = function () { return 'hey'},
    keyString = "a string";

// setting the values
myMap.set(keyString, "value associated with 'a string'");
myMap.set(keyObj, "value associated with keyObj");
myMap.set(keyFunc, "value associated with keyFunc");

console.log(myMap.get(keyFunc));
Run Code Online (Sandbox Code Playgroud)

javascript javascript-objects ecmascript-6

80
推荐指数
5
解决办法
2万
查看次数

在对象上传播不可迭代实例的无效尝试

 data: [],

 ... 
Run Code Online (Sandbox Code Playgroud)

我将 API 调用中的数据加载到data数组中。然后我尝试使用下面的方法将数据数组排列成一个由键、值对(值可以是数组本身)组成的映射。

    const dataMap = {};
    for (let i = 0; i < data.length; i+=1) {
      const key = data[i].product.name;
      const value = data[i];

      if (key in dataMap) {
        dataMap[key].push(value);
      } else {
        dataMap[key] = [value];
      }
    }
Run Code Online (Sandbox Code Playgroud)

但是当我执行以下操作时,出现以下错误。我做错了什么?

{[...dataMap].map(([key, value]) => {}
Run Code Online (Sandbox Code Playgroud)

传播不可迭代实例的无效尝试

这是我的数据图 在此输入图像描述

DataMap 计算正确,但是当我使用以下代码进行迭代时

Object.entries(dataMap).map((key, value) => {
          console.log(key);
          console.log(value)
 })
Run Code Online (Sandbox Code Playgroud)

它打印出以下内容。值是一些我不明白为什么的索引?值应该是一个数组。我的dataMap是一个key,value(值是一个数组)

在此输入图像描述

javascript

7
推荐指数
1
解决办法
9万
查看次数

在 es6 Map 上调用 `Array.prototype.some()` 的更好方法

我最近将一些使用常规对象作为映射的代码转换为新的 es6Map类。我很快就遇到了一个问题,虽然Map该类包含一个forEachlike Array,但它不包含一个some方法以及许多其他Array.prototype方法。

为了提供一些上下文,带有常规 JS 对象的原始代码如下所示:

var map = {
    entry1: 'test',
    entry2: 'test2'
};

Object.keys(map).some(key => {
    var value = map[key];
    // Do something...found a match
    return true;
});
Run Code Online (Sandbox Code Playgroud)

Map类不包括一个entries方法,但遗憾的是此返回一个Iterator对象。这也不包括访问这些Array.prototype方法的任何简单方法。

我很好奇是否有一种干净的方法可以做到这一点,或者我是否在咆哮错误的树。

javascript arrays ecmascript-6 es6-map

5
推荐指数
1
解决办法
1971
查看次数

为什么..在获取所有属性,但是...的...没有得到所有的值?

我测试了以下代码:

arr = [3, 5, 7];

arr.foo = "hello";

arr["boo"] ="moo"


for (i in arr) {
   console.log(i);
}

for (i of arr) {
   console.log(i); 
}
Run Code Online (Sandbox Code Playgroud)

for .. in获取数组的所有属性.

for (i in arr) {
   console.log(i); 
}
Run Code Online (Sandbox Code Playgroud)

收益:

0 
1 
2 
foo 
boo
Run Code Online (Sandbox Code Playgroud)

但是因为...没有得到所有的价值观

  for (i of arr) {
       console.log(i); 
    }
Run Code Online (Sandbox Code Playgroud)

收益:

3
5
7
Run Code Online (Sandbox Code Playgroud)

这种差异的技术原因是什么?为什么这种明显的不一致性被接受为默认行为?

javascript ecmascript-6

3
推荐指数
1
解决办法
97
查看次数

React.addons.createFragment对象中的元素顺序

我正在阅读https://facebook.github.io/react/docs/create-fragment.html文章,发现FB工程师依赖于对象内存布局(属性的顺序):

if (this.props.swapped) {
  children = React.addons.createFragment({
    right: this.props.rightChildren,
    left: this.props.leftChildren
  });
} else {
  children = React.addons.createFragment({
    left: this.props.leftChildren,
    right: this.props.rightChildren
  });
}
Run Code Online (Sandbox Code Playgroud)

我错过了什么或他们依赖不可靠并提供脆弱的代码?

PS:从ES规范的角度来看问题(我希望它得到回答),而不是一些JS引擎实现的观点(在规范中可能会有变化).

javascript facebook reactjs

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

为什么我不能迭代 ES6 Map 的属性?

在 Node.js REPL 中:

> var map = new Map();
undefined
> map['foo'] = 'bar';
'bar'
> map['bar'] = 'baz';
'baz'
> map
Map { foo: 'bar', bar: 'baz' }
> map.forEach(console.log);
undefined
Run Code Online (Sandbox Code Playgroud)

如您所见,foobar键在 中明确定义map,但是当我尝试使用 迭代它们时Map.prototype.forEach,没有任何反应 - 但根据 MDN,它应该. 还要注意,这Map.prototype.forEach 是定义的,所以不仅仅是这个方法还没有实现。我也尝试过使用for ... of ...循环,结果相同 - 我提供的每次迭代运行的代码实际上并没有运行,即使它应该.

我在 Node.js v4.4.4 上。我在网上搜索了“javascript 地图不是可迭代节点”等内容,但没有成功。

这里发生了什么?

javascript dictionary node.js ecmascript-6

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

为什么javascript对象没有map/reduce/filter?

假设我有这个对象:

const millionsOfLines = {
    windowsVista: 50,
    firefox: 9,
    google: 2000,
    quake3Engine: 0.3,
    mySQL: 12
};
Run Code Online (Sandbox Code Playgroud)

我会以同样的方式为数组做,如果我能做的话:

const lessThan10 = millionsOfLines.filter((value, key)=> value < 10);
Run Code Online (Sandbox Code Playgroud)

相反,我必须这样做:

const lessThan10 = {};
Object.keys(millionsOfLines).forEach(key=>{
    if (millionsOfLines[key] < 10) {
        lessThan10[key] = value;
    }
});
Run Code Online (Sandbox Code Playgroud)

多么麻烦.其他函数肯定也可以与数组版本完全相同的方式工作:

const thousandsOfLines = millionsOfLines.map((value, key)=> value * 1000);
const totalLines = millionsOfLines.reduce((total, currValue, currKey)=> total + currValue);
Run Code Online (Sandbox Code Playgroud)

我计划将其与我实际需要输入的内容进行比较,但我无法承受这种痛苦,所以这是留给读者的练习.

那么 - 为什么javascript对象没有map/reduce/filter?

javascript functional-programming ecmascript-6

-5
推荐指数
1
解决办法
193
查看次数