以下是_.object函数的文档中的描述。
将数组转换为对象。传递单个[键,值]对列表或键列表以及值列表。如果存在重复键,则最后一个值获胜。
通过此示例,它按预期工作。 “1”的键被赋值为“TEST1”。
_.object(["1", "1"], ["TEST", "TEST1"])
>> Object {1: "TEST1"}
_.object(["1", "1"], ["TEST"])
>> Object {1: undefined}
在最后一个例子中,我希望该值为“TEST”,但未定义。
此行为是否有特定原因?
感谢。
答案 0 :(得分:2)
行为是正确的。第一次电话
_.object(["1", "1"], ["TEST", "TEST1"])
将密钥1与TEST关联,密钥1与TEST1关联(覆盖先前的关联)。
第二个电话:
_.object(["1", "1"], ["TEST"])
具有相同的逻辑,但第二个键1与'values'数组中第二个位置的元素相关联,这是未定义的。
PS:_.object
的{{3}}就是:
// 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;
};
似乎他们确实指定数组需要具有相同的长度。从代码中可以明显看出,如果第二个数组较大,则忽略最后一个值,如果它较小,则最后一个值将是未定义的。