Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/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_Loops_Functional Programming - Fatal编程技术网

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)