带有名字的JavaScript字典

Kir*_*ran 55 javascript dictionary map

我想在javascript中创建一个字典,如下所示:

myMappings = [
{ "Name":10%},
{ "Phone":10%},
{ "Address":50%},
{ "Zip":10%},
{ "Comments":20%}
]
Run Code Online (Sandbox Code Playgroud)

我想稍后填充一个html表,并希望将表的标题设置为myMappings的第一列,将列的宽度设置为第二列.因为我是JS的新手,无法找到干净的方式.有人会建议吗?

谢谢

Dav*_*ang 66

我看到的主要问题是,为了填充表格,很难循环.

只需使用数组:

var myMappings = [
    ["Name", "10%"], // Note the quotes around "10%"
    ["Phone", "10%"],
    // etc..
];
Run Code Online (Sandbox Code Playgroud)

......简化了访问:

myMappings[0][0]; // column name
myMappings[0][1]; // column width
Run Code Online (Sandbox Code Playgroud)

或者:

var myMappings = {
    names: ["Name", "Phone", etc...],
    widths: ["10%", "10%", etc...]
};
Run Code Online (Sandbox Code Playgroud)

访问:

myMappings.names[0];
myMappings.widths[0];
Run Code Online (Sandbox Code Playgroud)

  • 你最好使用对象数组,就像`[{'Phone':'10%','Name':'10%'},{},{}]`。如果您使用的是数组,则您专门使用了某种“顺序”,在这种情况下这并不重要。 (2认同)

小智 65

另一种方法是拥有一个对象数组,每个单独的对象保存一列的属性.这稍微改变了"myMappings"的结构,但使其易于使用:

var myMappings = [
    { title: "Name", width: "10%" },
    { title: "Phone", width: "10%" },
    { title: "Address", width: "50%" },
    { title: "Zip", width: "10%" },
    { title: "Comments", width: "20%" }
];
Run Code Online (Sandbox Code Playgroud)

然后,您可以使用for循环轻松遍历所有"列":

for (var i = 0; i < myMappings.length; i += 1) {
    // myMappings[i].title ...
    // myMappings[i].width ...
}
Run Code Online (Sandbox Code Playgroud)

  • 这可能是您正在寻找的解决方案 (9认同)

Jas*_*son 21

您是否尝试使用JSON对象?

var myMappings = { "name": "10%", "phone": "10%", "address": "50%", etc.. }
Run Code Online (Sandbox Code Playgroud)

要访问:

myMappings.name;
myMappings.phone;
etc..
Run Code Online (Sandbox Code Playgroud)

  • JSON的前3个字母就足够了:JavaScript Object."JavaScript Object Notation对象"听起来很奇怪. (7认同)
  • 这是一个对象文字,而不是JSON. (4认同)
  • 我的观点是,JSON是一种数据格式,而对象文字是一段JavaScript代码. (4认同)
  • @ box9哈哈,你是对的.这是一个很好的例子,就像ATM机一样.好的捕获,虽然我认为说JSON对象很常见 (3认同)

Jan*_*nen 18

从技术上讲,对象是adictionary.

var myMappings = {
    mykey1: 'myValue',
    mykey2: 'myValue'
};

var myVal = myMappings['myKey1'];

alert(myVal); // myValue
Run Code Online (Sandbox Code Playgroud)

你甚至可以循环使用一个.

for(var key in myMappings) {
    var myVal = myMappings[key];
    alert(myVal);
}
Run Code Online (Sandbox Code Playgroud)

没有理由重新发明轮子.当然,任务如下:

myMappings['mykey3'] = 'my value';
Run Code Online (Sandbox Code Playgroud)

并包含关键字:

if (myMappings.hasOwnProperty('myKey3')) {
    alert('key already exists!');
}
Run Code Online (Sandbox Code Playgroud)

我建议你按照这个http://javascriptissexy.com/how-to-learn-javascript-properly/


0e4*_*622 9

尝试:

var myMappings = {"Name":"10%",
"Phone":"10%",
"Address":"50%",
"Zip":"10%",
"Comments":"20%"}
//access like this
myMappings["Name"] //returns "10%"
myMappings.Name //same thing as above
//to loop through...
for(var title in myMappings){
  //do whatever with myMappings[title]
}
Run Code Online (Sandbox Code Playgroud)


Vai*_*hav 5

编辑>>好消息,这里现在是一个更简单,原生和更有效的方式来模拟JS中的字典: 还利用JS弱键入.而是类型推断.无论如何..

这是如何(谷歌Chrome控制台的摘录):

var myDict = {};

myDict.one = 1;
1

myDict.two = 2;
2

if (myDict.hasOwnProperty('three'))
{
  console.log(myDict.two);
}
else
{
  console.log('Key does not exist!');
}
Key does not exist! VM361:8

if (myDict.hasOwnProperty('two'))
{
  console.log(myDict.two);
}
else
{
  console.log('Key does not exist!');
}
2 VM362:4

Object.keys(myDict);
["one", "two"]

delete(myDict.two);
true

myDict.hasOwnProperty('two');
false

myDict.two
undefined

myDict.one
1
Run Code Online (Sandbox Code Playgroud)