簡體   English   中英

Underscore.js:_.object函數的意外行為

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM