JavaScript“地图”功能
JavaScript “map” function
看看JavaScript中的map
方法,我做错了什么?
// Input: [ { name: "Kevin"}, { name: "Bob" } ]
// Output: [ { "Kevin" :0 }, { "Bob": 1 } ]
var map = function(arr, property) {
var i = 0;
var m = arr.prototype.map(makeKv);
// Input: { name: "Kevin" }
// Output: { "Kevin" = i } // GLOBAL
function makeKv(item) {
return {
item: i++
};
};
console.log("m : " + m);
};
JSFiddle
也请帮助我摆脱全局。
这里有几个问题:
首先,
var m = arr.prototype.map(makeKv);
这里不需要prototype
。只有在使用构造函数(如Array.prototype.map
)时才能使用它。在这里,你只需要做arr.map
。
第二,
function makeKv(item) {
return {item: i++};
};
您从不在任何地方声明i
。你怎么能在不存在的东西上加一个呢。在此之前,您需要有var i = 0;
。
最后,return {item: i++};
将生成一个名为的密钥(字面意思为"item"
)。您需要首先声明对象(var ret = {};
),然后使用[item]
来设置值。
Array.map
的回调作为第一个参数传递给数组中的元素,因此item
将是一个对象。您需要执行item[property]
才能获得所需的值。
附言:不要在console.log
中执行"m : " + m
,这将连接字符串,从而将m
转换为字符串。改为使用,
:console.log("m : ", m);
所以,大家一起试试:
var map = function(arr, property) {
var i = 0;
var m = arr.map(makeKv);
function makeKv(item) {
var ret = {};
ret[item[property]] = i++;
return ret;
};
console.log("m : ", m);
}
演示:http://jsfiddle.net/FgdSj/3/
EDIT:Array.map
的回调被传递给数组中的索引作为第二个参数,因此这里不需要var i = 0;
:
var map = function(arr, property) {
var m = arr.map(makeKv);
function makeKv(item, index) {
var ret = {};
ret[item[property]] = index;
return ret;
};
console.log("m : ", m);
}
演示:http://jsfiddle.net/FgdSj/5/
arr.prototype.map(makeKv);
应该是
arr.map(makeKv);
现在你有另一个问题,因为它将返回
[ { item : 0}, { item : 1} ]
如果将映射函数更改为
function makeKv(item) {
var x = {}
x[item.name] = i++;
return x;
};
它会给你想要的。
JSFiddle
只需直接调用.map
arr.map(makeKv)
I、 无论出于何种原因(可能map
被覆盖),您都希望使用Array.prototype
的方法
[].map.call(arr, makeKv);
这是,一切都为你准备好了,以匹配你想要的输出
// input: [{name: "Kevin"}, {name: "Bob"}], "name"
var map = function(arr, property) {
var i = 0;
function makeKv(item) {
var obj = {};
obj[item[property] = i++;
return obj;
};
return arr.map(makeKv);
}
var result = map([{name: "Kevin"}, {name: "Bob"}], "name");
console.log(result);
// [{"Kevin" : 0}, {"Bob" : 1}];
var map = function(arr, property) {
var i = 0;
var m = Array.prototype.map(makeKv);
// input: {name: "Kevin"}
// output: "Kevin" = i // GLOBAL
function makeKv(item) {
return {item: i++};
};
console.log("m : " + m);
return m;
}
map();
相关文章:
- 美国地图插件,具有状态数据/悬停功能的新按钮
- JavaScript功能上的谷歌地图
- 在地图区域触发点击功能
- 谷歌地图spiderfly功能-在同一点上有多个标记
- 访问谷歌地图事件中的Backbone.View功能
- JavaScript“地图”功能
- 角度谷歌地图在初始地图加载后运行一次功能
- 仅通过 Google 地图 API 自动完成功能获取城市名称
- 如何将我的 Google 地图功能从自动查找我的位置更改为让我输入一个位置
- 在谷歌地图自动补充之后启动一个功能
- 谷歌地图API - 这条线的含义/功能是什么
- 滚动功能在谷歌地图上不起作用
- 禁用谷歌地图的“放大”功能
- 向地图框添加功能.js
- 使用 RequireJS 加载 Google 地图自动完成功能
- 谷歌地图API V3与图标类型和选择功能
- 如何从文本框禁用谷歌地图自动完成功能
- 谷歌地图功能,但不显示地图
- 谷歌地图API v3:是否有任何功能可以检查坐标是否在省或国家/地区内
- JavaScript 谷歌地图一次只有一个功能工作,其余的不工作