![](/img/trans.png)
[英]How to add an object property inside an array using a variable name for javascript?
[英]Add a property to a JavaScript object using a variable as the name?
我正在使用 jQuery 將項目從 DOM 中拉出,並希望使用 DOM 元素的id
在 object 上設置屬性。
const obj = {}
jQuery(itemsFromDom).each(function() {
const element = jQuery(this)
const name = element.attr('id')
const value = element.attr('value')
// Here is the problem
obj.name = value
})
如果itemsFromDom
包含一個id
為“myId”的元素,我希望obj
有一個名為“myId”的屬性。 以上給了我name
。
如何使用 JavaScript 使用變量命名 object 的屬性?
您可以使用以下等效語法:
obj[name] = value
示例:
let obj = {};
obj["the_key"] = "the_value";
或具有 ES6 特性:
let key = "the_key";
let obj = {
[key]: "the_value",
};
在這兩個例子中, console.log(obj)
將返回: { the_key: 'the_value' }
使用ECMAScript 2015,您可以使用括號表示法直接在對象聲明中執行此操作:
var obj = {
[key]: value
}
其中key
可以是返回值的任何類型的表達式(例如變量):
var obj = {
['hello']: 'World',
[x + 2]: 42,
[someObject.getId()]: someVar
}
你甚至可以像這樣制作對象列表
var feeTypeList = [];
$('#feeTypeTable > tbody > tr').each(function (i, el) {
var feeType = {};
var $ID = $(this).find("input[id^=txtFeeType]").attr('id');
feeType["feeTypeID"] = $('#ddlTerm').val();
feeType["feeTypeName"] = $('#ddlProgram').val();
feeType["feeTypeDescription"] = $('#ddlBatch').val();
feeTypeList.push(feeType);
});
訪問對象屬性有兩種不同的表示法
點表示法既快速又簡單,但您必須明確使用實際的屬性名稱。 沒有替換,變量等。
括號表示法是開放式的。 它使用字符串,但您可以使用任何合法的 js 代碼生成字符串。 您可以將字符串指定為文字(盡管在這種情況下點符號會更容易閱讀)或使用變量或以某種方式計算。
因此,這些都將名為prop1的myObj屬性設置為值Hello :
// quick easy-on-the-eye dot notation
myObj.prop1 = "Hello";
// brackets+literal
myObj["prop1"] = "Hello";
// using a variable
var x = "prop1";
myObj[x] = "Hello";
// calculate the accessor string in some weird way
var numList = [0,1,2];
myObj[ "prop" + numList[1] ] = "Hello";
陷阱:
myObj.[xxxx] = "Hello"; // wrong: mixed notations, syntax fail
myObj[prop1] = "Hello"; // wrong: this expects a variable called prop1
tl;dnr :如果要計算或引用密鑰,則必須使用括號表示法。 如果您明確使用密鑰,則使用點符號表示簡單明了的代碼。
注意:還有一些其他好的和正確的答案,但我個人發現它們有點簡短,因為對 JS 的即時怪癖不太熟悉。 這可能對某些人有用。
使用 lodash,你可以像這樣創建新對象_.set :
obj = _.set({}, key, val);
或者您可以設置為現有對象,如下所示:
var existingObj = { a: 1 };
_.set(existingObj, 'a', 5); // existingObj will be: { a: 5 }
如果你想在你的路徑中使用點(“.”),你應該小心,因為 lodash 可以設置層次結構,例如:
_.set({}, "a.b.c", "d"); // { "a": { "b": { "c": "d" } } }
首先我們需要將key定義為變量,然后我們需要將key賦值為object。例如
var data = {key:'dynamic_key',value:'dynamic_value'} var key = data.key; var obj = { [key]: data.value} console.log(obj)
與主題相關,但不是專門針對 jquery。 我在 ec6 react 項目中使用了這個,也許可以幫助某人:
this.setState({ [`${name}`]: value}, () => {
console.log("State updated: ", JSON.stringify(this.state[name]));
});
PS:請注意引號字符。
隨着 ES2015 Object.assign和計算屬性名稱的出現,OP 的代碼歸結為:
var obj = Object.assign.apply({}, $(itemsFromDom).map((i, el) => ({[el.id]: el.value})));
如果要動態地向對象添加字段,最簡單的方法如下:
let params = [
{ key: "k1", value: 1 },
{ key: "k2", value: 2 },
{ key: "k3", value: 3 },
];
let data = {};
for (let i = 0; i < params.length; i++) {
data[params[i].key] = params[i].value;
}
console.log(data); // -> { k1: 1, k2: 2, k3: 3 }
ajavascript 有兩種類型的注釋用於獲取 javascript 對象屬性:
對象 = {};
1) (.) 注釋,例如。 Obj.id 僅當對象已經具有名稱為“id”的屬性時才有效
2) ([]) 注釋,例如 . Obj[id] 在這里,如果對象沒有任何名稱為“id”的屬性,它將創建一個名稱為“id”的新屬性。
所以對於下面的例子:
當您編寫 Obj[name] 時,將始終創建一個新屬性。 如果該屬性已經存在同名,它將覆蓋它。
const obj = {}
jQuery(itemsFromDom).each(function() {
const element = jQuery(this)
const name = element.attr('id')
const value = element.attr('value')
// This will work
obj[name]= value;
})
如果你有對象,你可以創建鍵數組,而不是映射,並從以前的對象鍵和值創建新對象。
Object.keys(myObject)
.map(el =>{
const obj = {};
obj[el]=myObject[el].code;
console.log(obj);
});
訪問對象值的3種方式我們可以通過傳入合適的鍵來輸出對象值。 因為我在我的例子中使用了表情符號作為鍵,所以有點棘手。 所以讓我們看一個更簡單的例子。
let me = {
name: 'samantha',
};
// 1. Dot notation
me.name; // samantha
// 2. Bracket notation (string key)
me['name']; // samantha
// 3. Bracket notation (variable key)
let key = 'name';
me[key]; // samantha
objectname.newProperty = value;
const data = [{
name: 'BMW',
value: '25641'
}, {
name: 'Apple',
value: '45876'
},
{
name: 'Benz',
value: '65784'
},
{
name: 'Toyota',
value: '254'
}
]
const obj = {
carsList: [{
name: 'Ford',
value: '47563'
}, {
name: 'Toyota',
value: '254'
}],
pastriesList: [],
fruitsList: [{
name: 'Apple',
value: '45876'
}, {
name: 'Pineapple',
value: '84523'
}]
}
let keys = Object.keys(obj);
result = {};
for(key of keys){
let a = [...data,...obj[key]];
result[key] = a;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.