簡體   English   中英

如何在JavaScript中將數組元素指定為對象中的屬性值?

[英]How to specify array elements as property values in an object in JavaScript?

可以說我有一個數組

var array = ["lionel", "messi"];

我想使用該數組的元素的值作為對象中的屬性值。

var obj = {
  "first-name": "cristiano",
  "last-name": "ronaldo"
}

我希望最后一個對象是

var obj = {
  "first-name": "lionel",
  "last-name": "messi"
}

如何在JavaScript中執行此操作? 還是有lodash函數可以做到這一點?

您只需分配這些屬性:

obj["first-name"] = array[0];
obj["last-name"] = array[1];

例:

 var array = ["lionel", "messi"]; var obj = { "first-name": "cristiano", "last-name": "ronaldo" }; obj["first-name"] = array[0]; obj["last-name"] = array[1]; console.log(obj); 

在ES2015 +中,您可以使用解構分配:

[obj["first-name"], obj["last-name"]] = array;

例:

 var array = ["lionel", "messi"]; var obj = { "first-name": "cristiano", "last-name": "ronaldo" }; [obj["first-name"], obj["last-name"]] = array; console.log(obj); 


在評論中,您說過:

但是如果我必須動態地執行該操作怎么辦? 如何遍歷數組/對象中的兩個?

如果您要按其位置array的條目分配給obj的對象屬性, 請注意,對象屬性順序自ES2015起是新的,容易被誤解。

但是如果您的對象確實定義為:具有完全符合ES2015 +的JavaScript引擎,

var obj = {
  "first-name": "cristiano",
  "last-name": "ronaldo"
};

...然后, Object.getOwnPropertyNames將可靠地返回["first-name", "last-name"]保證Object.keys會返回),因為:

  1. 屬性是由對象初始化程序按此順序創建的
  2. 它們是“自有”屬性
  3. 它們具有字符串名稱(不是符號名稱),
  4. 它們看起來不像數組索引,並且
  5. 這是一個普通的對象

是的,有很多警告。 所以您可以這樣使用:

Object.getOwnPropertyNames(obj).forEach((key, index) => {
    obj[key] = array[index];
});

例:

 var array = ["lionel", "messi"]; var obj = { "first-name": "cristiano", "last-name": "ronaldo" }; Object.getOwnPropertyNames(obj).forEach((key, index) => { obj[key] = array[index]; }); console.log(obj); 

再次:這僅適用於完全符合ES2015 +的JavaScript引擎,並具有如上所示定義的對象。 getOwnPropertyNames報告屬性的順序可能很復雜。 規范中的細節

這將起作用:

 var array = ["lionel", "messi"]; var order = ["first-name", "last-name"]; var obj = { "first-name": "cristiano", "last-name": "ronaldo" } for(var i = 0; i < array.length; i++) { obj[order[i]] = array[i]; } console.log(obj); 

除了Object.keys(obj)部分,其他所有內容都是不言自明的。 它只是返回obj(`[“ first-name”,“ last-name”])鍵的數組,它獲取每個鍵並將它們分配給您的數組。

編輯:

另外,正如評論中所說的,您需要一個訂單數組。

您可以實現為:

function heteroCopy(obj, array) {
    let keys = Object.keys(obj);
    for (let i in keys) {
        obj[keys[i]] = array[i];
    }
    return obj;
}

Javascript沒有像PHP這樣的關聯數組的概念。 您可以創建JSON(JavaScript對象表示法)。 並且請嘗試理解使用對象的概念。 不要使用對象,因為您想像數組一樣使用它。 JavaScript具有類的概念。 您可以創建具有成員名字,姓氏的類。 實例化它並分配您的值。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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