繁体   English   中英

使用变量作为名称向 JavaScript object 添加属性?

[英]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);
});

访问对象属性有两种不同的表示法

  • 符号: myObj.prop1
  • 括号表示法: myObj["prop1"]

点表示法既快速又简单,但您必须明确使用实际的属性名称。 没有替换,变量等。

括号表示法是开放式的。 它使用字符串,但您可以使用任何合法的 js 代码生成字符串。 您可以将字符串指定为文字(尽管在这种情况下点符号会更容易阅读)或使用变量或以某种方式计算。

因此,这些都将名为prop1myObj属性设置为值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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM