将动态键,值对添加到JavaScript数组或哈希表


70

我正在尝试将键值对添加到现有的javascript关联数组。密钥必须是一个变量。这是用于JSON编码的。我意识到有很多用于此的插件和框架,但是我想要一个简单的答案。

ary.push({name: val});

这里ary是一个新数组,name是一个包含键的变量,val是此项的值。

我正在jQuery循环遍历表单字段的循环中进行此操作。


动态key:value对传递给对象文字的可能重复项?---在提出问题之前,请先使用搜索功能。
Felix Kling 2012年

3
您要ary= [键:值,键:值,...]`还是ary = [{key: value}, {key: value}, ... ]
wheresrhys 2012年

Answers:


192

在ES6中...

在ES6中,您可以使用解构分配

ary.push({[name]: val});

但是,鉴于这是ES6语法,因此通常需要注意以下几点:尽管Babel会为您转换此功能,但在某些浏览器(尤其是IE和Edge 13)中将无法使用此功能。


没有ES6(旧版浏览器支持)...

您需要定义一个对象并使用方括号表示法设置属性。

var obj = {};

obj[name] = val;

ary.push(obj);

如果您有更多阅读的欲望,请参阅本文,了解方括号和点表示法之间的区别。


1
这就是答案。谢谢!当我将数组声明为数组时,我正在与ary []公司“ kim corp”电子邮件“ eml1”联系起来
Kim Schroeder

17
如果这是您的答案,则应将其标记为这样,这样Matt就能获得荣誉,并且人们可以轻松地看到哪个答案对您有用。
Atomox

这帮助了我。我在数组对象中有多个名称/值对-例如在PHP:中$test = array(); $test[] = array ("description" => "first", "identifier" => "1");。要在JavaScript中添加它var obj = {}; obj["description"] = "second"; obj["identifier"] = 2; ary.push(obj);,ary是被分配PHP数组的JavaScript变量。
Gravitoid

特别是第一个。ES6语法完全符合我的预期。我得到了带有“动态”键名的简单键/值对。所以它在IE中不起作用...还有什么新功能。
Non Plus Ultra

36
var ary = [];

function pushToAry(name, val) {
   var obj = {};
   obj[name] = val;
   ary.push(obj);
}

pushToAry("myName", "myVal");

尽管已经完全阅读了您的问题,但您需要做的只是以下内容

$(your collection of form els).serializeArray();

好老的jQuery


27

“关联数组”实际上只是一个对象。您无需使用推,只需将属性分配给对象:

ary[name] = val;

我同意。我将发布所有代码,并希望您能看到错误在哪里
Kim Schroeder 2012年

这是最好的答案。非常简单,如果您已经定义了哈希,那么这一切都需要。
nfriend21 2014年

2
const tStyles = [];
for (const i of iStyles) {
  const temp = {};
  temp[`${style}`] = `../dist/css/uikit.${wFile}.${style}.css`;
  tStyles.push(temp);
}

json:{“ black-beige”:“ ../ dist / css / uikit.or.black-beige.css”}


2

以下代码将为您提供帮助

ary.push( {[name]: val} );

见下面的例子

let allData = [{name: "Cat", type: "Animal"}]
let finalData: any = [];
for (let i = 0; i < allData.length; i++)
{
  let obj = allData[i];
  for (let KEY in obj)
  {
    //Pushing data to other array as object
    this.finalData.push({ [KEY] : obj[KEY] });
  }
}
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.