Javascript 如何创建字典和添加键–;动态值对?

Javascript 如何创建字典和添加键–;动态值对?,javascript,dictionary,key-value,Javascript,Dictionary,Key Value,发信人: 我正试着做和那篇文章一样的事情。唯一的问题是我不知道键和值是什么。所以我需要能够动态地添加键和值对,我不知道怎么做 有人知道如何创建该对象并动态添加键值对吗 我试过: var vars = [{key:"key", value:"value"}]; vars[0].key = "newkey"; vars[0].value = "newvalue"; 但这不起作用 var dict = []; // create an empty array dict.push({ ke

发信人:

我正试着做和那篇文章一样的事情。唯一的问题是我不知道键和值是什么。所以我需要能够动态地添加键和值对,我不知道怎么做

有人知道如何创建该对象并动态添加键值对吗

我试过:

var vars = [{key:"key", value:"value"}];
vars[0].key = "newkey";
vars[0].value = "newvalue";
但这不起作用

var dict = []; // create an empty array

dict.push({
    key:   "keyName",
    value: "the value"
});
// repeat this last part as needed to add more key/value pairs
基本上,您正在创建一个具有两个属性的对象文字(称为
key
value
)并将其插入(使用
push()
)数组中


编辑:因此,近5年后,这个答案遭到了否决,因为它没有创建“正常”的JS对象文字(又名map、又名hash、又名dictionary)。
然而,它正在创建OP所要求的结构(如链接的另一个问题所示),这是一个对象文本数组,每个文本都具有
属性。不要问我为什么需要这种结构,但这正是人们要求的

但是,如果你想要一个简单的JS对象,而不是OP所要求的结构,请看,尽管如果你只有简单的JS名称键,括号符号有点麻烦。您可以这样做:

// object literal with properties
var dict = {
  key1: "value1",
  key2: "value2"
  // etc.
};
或在创建对象后使用常规点符号设置属性:

// empty object literal with properties added afterward
var dict = {};
dict.key1 = "value1";
dict.key2 = "value2";
// etc.
如果您的键中有空格、特殊字符或诸如此类的东西,那么您确实需要括号表示法。例如:

var dict = {};

// this obviously won't work
dict.some invalid key (for multiple reasons) = "value1";

// but this will
dict["some invalid key (for multiple reasons)"] = "value1";
如果关键点是动态的,还需要括号表示法:

dict[firstName + " " + lastName] = "some value";
请注意,键(属性名)始终是字符串,当用作键时,非字符串值将强制为字符串。例如,
Date
对象被转换为其字符串表示形式:

dict[new Date] = "today's value";

console.log(dict);
// => {
//      "Sat Nov 04 2016 16:15:31 GMT-0700 (PDT)": "today's value"
//    }
但是请注意,这并不一定“起作用”,因为许多对象将具有类似于
“[object object]”“
的字符串表示形式,这并不构成非唯一键。因此,要警惕以下情况:

var objA = { a: 23 },
    objB = { b: 42 };

dict[objA] = "value for objA";
dict[objB] = "value for objB";

console.log(dict);
// => { "[object Object]": "value for objB" }
尽管
objA
objB
是完全不同且唯一的元素,但它们都具有相同的基本字符串表示形式:
“[object object]”

Date
不这样做的原因是
Date
原型有一个自定义的
toString
方法,该方法覆盖默认的字符串表示。你也可以这样做:

// a simple constructor with a toString prototypal method
function Foo() {
  this.myRandomNumber = Math.random() * 1000 | 0;
}

Foo.prototype.toString = function () {
  return "Foo instance #" + this.myRandomNumber;
};

dict[new Foo] = "some value";

console.log(dict);
// => {
//      "Foo instance #712": "some value"
//    }
(注意,由于上面使用的是随机数,名称冲突仍然很容易发生。这只是为了说明
toString
的一个实现)

因此,当尝试使用对象作为键时,JS将使用对象自己的
toString
实现(如果有的话),或者使用默认的字符串表示形式。

它非常简单:

var blah = {}; // make a new dictionary (empty)

然后


既然你已经说过你想要一个dictionary对象(而且不是数组,就像我假设一些人理解的那样),我想这就是你想要的:

var input = [{key:"key1", value:"value1"},{key:"key2", value:"value2"}];

var result = {};

for(var i = 0; i < input.length; i++)
{
    result[input[i].key] = input[i].value;
}

console.log(result); // Just for testing
var输入=[{key:“key1”,value:“value1”},{key:“key2”,value:“value2”}];
var result={};
对于(变量i=0;i
我遇到了这个问题。。但是在for循环中。顶级解决方案不起作用(当使用变量(而不是字符串)作为push函数的参数时),其他解决方案也没有考虑基于变量的键值。我很惊讶这种方法(在php中很常见)能奏效

就像python一样工作:)

控制台输出:

Object {key: "testing"} 

我碰巧遇到了这个问题,想寻找类似的东西。它给了我足够的信息来运行一个测试来得到我想要的答案。因此,如果其他任何人想知道如何在JavaScript对象中动态添加或查找{key:'value'}对,这个测试应该告诉您可能需要知道的所有内容

var dictionary = {initialkey: 'initialValue'};
var key = 'something';
var key2 =  'somethingElse';
var value = 'value1';
var value2 = 'value2';
var keyInitial = 'initialkey';

console.log(dictionary[keyInitial]);

dictionary[key] =value;
dictionary[key2] = value2;
console.log(dictionary);
输出

initialValue
{ initialkey: 'initialValue',
  something: 'value1',
  somethingElse: 'value2' }

JavaScript的
对象
本身就像一本字典。不需要重新发明轮子

var dict = {};

// Adding key-value -pairs
dict['key'] = 'value'; // Through indexer
dict.anotherKey = 'anotherValue'; // Through assignment

// Looping through
for (var item in dict) {
  console.log('key:' + item + ' value:' + dict[item]);
  // Output
  // key:key value:value
  // key:anotherKey value:anotherValue
}

// Non existent key
console.log(dict.notExist); // undefined

// Contains key?
if (dict.hasOwnProperty('key')) {
  // Remove item
  delete dict.key;
}

// Looping through
for (var item in dict) {
  console.log('key:' + item + ' value:' + dict[item]);
  // Output
  // key:anotherKey value:anotherValue
}

var dict={}
的改进是使用
var dict=Object.create(null)

这将创建一个空对象,该对象不具有作为其原型的
对象.prototype

var dict1 = {};
if (dict1["toString"]){
    console.log("Hey, I didn't put that there!")
}
var dict2 = Object.create(null);
if (dict2["toString"]){
    console.log("This line won't run :)")
}
您可以将地图与以下内容一起使用:

var sayings = new Map();
sayings.set('dog', 'woof');
sayings.set('cat', 'meow');

创建键值对的一行程序怎么样

let result = { ["foo"]: "some value" };
还有一些迭代器函数,如
reduce
,用于将数组动态转换为字典

var选项=[
{键:“foo”,值:1},
{键:“bar”,值:{id:2,名称:“two”},
{key:“baz”,值:{[“active”]:true},
];
var结果=选项。减少((累加器,电流)=>{
累加器[当前.键]=当前.值;
回流蓄能器;
}, {});

控制台日志(结果)您可以创建一个类词典,以便轻松地与词典列表交互:

类字典{
构造函数(){
this.items={};
}
has(键){
返回此.items中的键;
}
设置(键、值){
此项。项[键]=值;
}
删除(键){
如果(这个有(钥匙)){
删除此项。项[键]
返回true;
}
返回false;
}
}
var d=新字典();
d、 设置(1,“值1”)
d、 设置(2,“值2”)
d、 设置(3,“值3”)
控制台日志(d.has(2));
d、 删除(2);
控制台日志(d.has(2))在现代javascript(ES6/ES2015)中,应该使用地图数据结构作为字典。ES6中的映射数据结构允许您使用任意值作为键

const map = new Map();
map.set("true", 1);
map.set("false", 0);
在您仍在使用ES5的情况下,创建字典的正确方法是按照以下方式创建没有原型的对象

var map = Object.create(null);
map["true"]= 1;
map["false"]= 0;
在没有原型对象的情况下创建字典有很多优点。关于这个话题,下面的博客值得一读

首先全局初始化数组

将对象添加到字典中

从字典更新对象

从字典中删除对象


使用ES6
,您可以执行以下操作:

let cake = 'In case if someone needs to create a dictionary object dynamically you can use the following code snippet

   let vars = [{key:"key", value:"value"},{key:"key2", value:"value2"}];
     let dict={}
     vars.map(varItem=>{
              dict[varItem.key]=varItem.value
            })

    console.log(dict)
let cake='如果
var sayings = new Map();
sayings.set('dog', 'woof');
sayings.set('cat', 'meow');
let result = { ["foo"]: "some value" };
const map = new Map();
map.set("true", 1);
map.set("false", 0);
var map = Object.create(null);
map["true"]= 1;
map["false"]= 0;
var dict = []
dict.push(
     { key: "One",value: false},
     { key: "Two",value: false},
     { key: "Three",value: false});

Output : 
   [0: {key: "One", value: false}
    1: {key: "Two", value: false}
    2: {key: "Three", value: false}]
Object.keys(dict).map((index) => {        
  if (index == 1){
    dict[index].value = true
  }
});

Output : 
   [0: {key: "One", value: false},
    1: {key: "Two", value: true},
    2: {key: "Three", value: false}]
Object.keys(dict).map((index) => {              
      if (index == 2){
        dict.splice(index)
      }
    });

Output : 
    [0: {key: "One", value: false},
     1: {key: "Two", value: true}]
let cake = 'In case if someone needs to create a dictionary object dynamically you can use the following code snippet

   let vars = [{key:"key", value:"value"},{key:"key2", value:"value2"}];
     let dict={}
     vars.map(varItem=>{
              dict[varItem.key]=varItem.value
            })

    console.log(dict)