JavaScript:函数映射?
有没有更简洁的方法来写这个JavaScript:函数映射?,javascript,loops,functional-programming,Javascript,Loops,Functional Programming,有没有更简洁的方法来写这个 var me = {}; for (var i in you) { me[i] = you[i]; } (其中,您是任意长度的JavaScript数组) 换言之,如果输入: var you = [ "what", "r", "u" ]; 输出,me,变为: me = { 0: "what", 1: "r", 2: "u" }; 例如,使用某种函数方法的一行程序?没有内置函数可以满足您的要求,但是一些广泛使用的javascript库(如jQuery
var me = {};
for (var i in you) {
me[i] = you[i];
}
(其中,您
是任意长度的JavaScript数组)
换言之,如果输入:
var you = [
"what",
"r",
"u"
];
输出,me
,变为:
me = {
0: "what",
1: "r",
2: "u"
};
例如,使用某种函数方法的一行程序?没有内置函数可以满足您的要求,但是一些广泛使用的javascript库(如jQuery)提供了这样的函数。在jQuery的情况下: 用法:
var me = {};
jQuery.extend(me,someObject);
//or, equivalently -
var me2 = jQuery.extend({},someObject);
你为什么要这样做?JavaScript中的数组是对象,除了一些附加属性,如
切片
、拼接
、推送
和长度
在内部,数组和对象的存储方式完全相同:例如,array[0]
与array[“0”]
或object[“0”]
是相同的(与其他语言不同,在其他语言中,相邻数组索引实际上位于相邻内存中-数组“索引”在JavaScript中仅转换为字符串)
因此,如果您只想复制数据,那么这就足够了:
me = you.slice(); // me is a copy of you, but is still an array
或者,如果您确实需要某种映射功能,那么可以提供一整套函数式编程工具供您阅读。jQuery有一个extend()
函数()。您的代码如下所示:
var me = {};
var you = ["what", "r", "u"];
$.extend(me, you);
这将允许您执行以下操作:
alert("Second element: " + me[1]);
这有点奇怪,但我认为这正是您想要的。我看到了您试图用字符串格式化程序实现的目标。我不回答您最初提出的一个问题,即对其中的一部分进行简洁的实现,而是建议对整个过程进行简洁(且更灵活)的实现:
String.prototype.format = function () {
var args = arguments;
return this.replace(/\{(?:(\d+)|(\w+))\}/g, function (s, idx, prop) {
return prop && args[0]
? args[0][prop]
: args[idx];
});
};
当您在令牌“{n}”
中有一个数字n
时,它将使用第n个参数进行替换。否则,对于非数字键,它将拾取第一个参数的相应属性
例如:
"I have {1} {name}s in my basket.".replace({ type: "fruit", name: "eggplant" }, 4);
返回:
"I have 4 eggplants in my basket."
js库还具有一个基本的扩展函数
VARME=({}).extend(你)
或
或
实际上,您的示例将给出
me={0:“what”、1:“r”、2:“u”、长度:3/*以及数组原型中的任何内容*/}代码>因为您要求……:)我试图改进这一点:@Agile,在代码中使用args
的方式,转换成replace
是完全不必要的。把那个else
block去掉,看看它是否有效;)+1表示下划线。如果他的问题有道理的话,下划线将给出答案
var me = {}
_(me).extend(you)
var me = {}
_.extend(me, you)