[英]Underscore.js: unexpected behavior with _.object function
以下是_.object函數的文檔中的描述。
將數組轉換為對象。 傳遞單個[鍵,值]對列表或鍵列表以及值列表。 如果存在重復鍵,則最后一個值獲勝。
通過此示例,它按預期工作。 “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;
};
似乎他們確實指定數組需要具有相同的長度。 從代碼中可以明顯看出,如果第二個數組較大,則忽略最后一個值,如果它較小,則最后一個值將是未定義的。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.