Underscore.js:具有_.object函数的意外行为
Underscore.js: unexpected behavior with _.object function
以下是_.object函数文档中的描述。
将数组转换为对象。传递单个[key,value]对列表,或者传递一个键列表和一个值列表。如果存在重复的密钥,则最后一个值获胜。
通过这个示例,它可以按预期工作。键"1"被分配了值"TEST1"。
_.object(["1", "1"], ["TEST", "TEST1"])
>> Object {1: "TEST1"}
_.object(["1", "1"], ["TEST"])
>> Object {1: undefined}
在最后一个例子中,我希望值是"TEST",但它是未定义的。
这种行为有具体的原因吗?
谢谢。
行为是正确的。第一次呼叫
_.object(["1", "1"], ["TEST", "TEST1"])
将键1与TEST相关联,将键1和TEST1相关联(覆盖先前的关联)。
第二次呼叫:
_.object(["1", "1"], ["TEST"])
具有相同的逻辑,但第二个键1与"values"数组中第二个位置的元素相关联,该元素未定义。
PS:_.object
的代码是:
// Converts lists into objects. Pass either a single array of `[key, value]`
// pairs, or two parallel arrays of the same length -- one of keys, and one of
// the corresponding values.
_.object = function(list, values) {
if (list == null) return {};
var result = {};
for (var i = 0, length = list.length; i < length; i++) {
if (values) {
result[list[i]] = values[i];
} else {
result[list[i][0]] = list[i][1];
}
}
return result;
};
它们似乎确实指定了数组需要具有相同的长度。从代码中可以明显看出,如果第二个数组较大,则会忽略最后的值;如果较小,则会未定义最后的值。
相关文章:
- Node.js使用Series函数(模式?)实现流控制时出现意外结果
- 在一个函数中,我有一个未捕获的语法错误:意外的标记else
- Javascript:函数返回意外结果
- Javascript 数组反向函数意外行为
- HTML 无法识别我要求它运行的 javascript 文件,语法错误:意外的令牌“<”(匿名函数)script.js:
- QML:Lambda 函数意外工作
- 意外的“else”和函数未运行
- 一个javascript函数导致“;意外标识符”;来自不同函数的错误
- Underscore.js:具有_.object函数的意外行为
- JavaScript自定义函数返回意外值
- 调用加载的顺序函数会意外中断代码
- 使用'时出现意外的T_FUNCTION;回调'=>函数($resp)
- JavaScript - 意外/奇怪的构造函数
- 未捕获的语法错误:意外的标记^(匿名函数)
- jQuery模块函数意外返回'未捕获的类型错误'
- PHP调用脚本函数,返回值为Uncaught SyntaxError:意外的令牌ILLEGAL
- 尝试用 JSON 编写函数,在函数调用中获取“意外令牌”
- 使用参数成功调用简单函数后出现意外警报,消息为“未定义”
- php/js 工具或函数,以防止从 php 打印到 javascript 时出现“意外非法”
- 具有意外结果的 Javascript 函数参数