0

我已阅读过类似的问题在这里stackoverflow,阅读JavaScript的MDN,并没有找到可比的例子,并且现在问如何创建所需的数组给定的数组。将复杂对象添加到数组中使用foreach或使用javascript映射

所需的数组是以这种格式存在,而不是在每个数组元素处是一个由一个键组成的对象,后跟一个本身就是key:value对的对象的值。 (如果你好奇我为什么要这样编码数组,我需要这种格式才能使用bind.js库)。

所需的格式:

var userSummary = { 
ryanc: { 
    "CreatedBy":"ryanc", 
"New Contacts":7, 
"New Invites (Challenge Groups)":8, 
"New Invites (Coaching Opportunity)":9, 
"New Follow Ups":12, 
"New Challenger Check-Ins":11, 
"Team Call Participation (National, upline team, or our team)":3, 
"SCPoints":0, 
"Volume":0 
}, 
Pupperpie: { 
"CreatedBy":"Pupperpie", 
"New Contacts":5, 
"New Invites (Challenge Groups)":4, 
"New Invites (Coaching Opportunity)":3, 
"New Follow Ups":3, 
"New Challenger Check-Ins":5, 
"Team Call Participation (National, upline team, or our team)":1, 
"SCPoints":0, 
"Volume":0 
}, 
bowdenke: { 
"CreatedBy":"bowdenke", 
"New Contacts":14, 
"New Invites (Challenge Groups)":3, 
"New Invites (Coaching Opportunity)":3, 
"New Follow Ups":1, 
"New Challenger Check-Ins":0, 
"Team Call Participation (National, upline team, or our team)":2, 
"SCPoints":0, 
"Volume":0 
} 
}; 

目前的格式是这样的:

var userSummary = { 
{ 
"Created By":"ryanc", 
"New Contacts":7, 
"New Invites (Challenge Groups)":8, 
"New Invites (Coaching Opportunity)":9, 
"New Follow Ups":12, 
"New Challenger Check-Ins":11, 
"Team Call Participation (National, upline team, or our team)":3, 
"SCPoints":0, 
"Volume":0 
}, 
{ 
"Created By":"Pupperpie", 
"New Contacts":5, 
"New Invites (Challenge Groups)":4, 
"New Invites (Coaching Opportunity)":3, 
"New Follow Ups":3, 
"New Challenger Check-Ins":5, 
"Team Call Participation (National, upline team, or our team)":1, 
"SCPoints":0, 
"Volume":0 
}, 
{ 
"Created By":"bowdenke", 
"New Contacts":14, 
"New Invites (Challenge Groups)":3, 
"New Invites (Coaching Opportunity)":3, 
"New Follow Ups":1, 
"New Challenger Check-Ins":0, 
"Team Call Participation (National, upline team, or our team)":2, 
"SCPoints":0, 
"Volume":0 
} 
}; 

目前我已经试过这个代码,这将插入一个文本“用户”而不是用户名是这样的:

{"user":{"Created By":"ryanc","New Contacts":0,"New Invites (Challenge Groups)":0,"New Invites (Coaching Opportunity)":0,"New Follow Ups":0,"New Challenger Check-Ins":0,"Team Call Participation (National, upline team, or our team)":0,"SC Points":0,"Volume":0}} 

array uniqueUser包含一组用户名,userSummary应该包含新格式特德对象。

我已经尝试了一些其他的这种变化,但似乎无法得到正确的语法。

uniqueUsers.forEach(function(user) { 
var obj = { user: { 
    'Created By': user, 
    'New Contacts': 0, 
    'New Invites (Challenge Groups)': 0, 
    'New Invites (Coaching Opportunity)': 0, 
    'New Follow Ups': 0, 
    'New Challenger Check-Ins': 0, 
    'Team Call Participation (National, upline team, or our team)': 0, 
    'SC Points': 0, 
    'Volume': 0 
}} 
userSummary.push(obj); 
}) 

我希望有任何其他想法,请让我知道,如果需要额外的信息。

+1

您目前的格式似乎相当无效? – adeneo

+0

Adeneo,你的意思是问题的格式?如果是这样,它已被纠正。如果你的意思是我的JS格式,那就是我遇到的问题。谢谢。 – Shazam

+0

好吧,它说*“当前格式是这个......”*,但是这是一个没有包含对象的键的对象,所以它是无效的,如果实际上是“当前格式”则会抛出错误。 – adeneo

回答

4

问题是这样的:

var obj = { user: { 
       ^^ 

由于JS不需要对象键报价,没有办法使用这个变量,因为你不能与“告诉用户是-A-关键“和”用户是一个变量“。

你不得不做

var obj = {}; 
obj[user] = {...} 

代替,其中解析器会知道user是一个变量,而不是quoteless字符串。

+0

非常感谢!我知道它必须是简单的,你的解释是有道理的。这工作...只要SO让我回答就会接受答案(有问题和答案的时间限制)。感谢Marc B,你是最棒的! – Shazam

+0

其他评论者,这个答案解决了我的编码问题。我仍然很感激任何关于“更好的方式”来完成我的任务的评论。 – Shazam

+1

@Shazam ES 2015允许您编写'{[user]:'blahblahblah'}',其中的密钥将是创建时字符串用户的值。你今天可以用babel做这个。 –

0

首先,您列出的第一件事不是一个数组,它是一个散列(也称为字典或映射)。其次,你想做什么是一个坏主意。将键值对的键格式化为您的表示层是一个可怕的想法。如果我是你,我会查找数组和哈希值之间的差异,然后如果你仍然决定用重新格式化的键值创建一个json,请使用Array.prototype.map函数

+0

杰米,凭直觉,这不是我想要编写它的方式,但我使用了一个名为bind.js的库,并且此codepen是我能够使其工作的唯一方法。不是将数据绑定到DOM的第二个绑定对象。可能有很多其他的方式来做我所需要的(角1/2,反应...?),但现在我有绑定工作。我愿意为这个项目提供更好的想法,我很乐意详细说明这个问题。 http://codepen.io/AdventureBear/pen/qabGXQ – Shazam

+0

并感谢您对散列或字典列表的解释。我不确定你在我的“表示层”中的含义。感谢您的帮助。 – Shazam

+0

'这是一个散列'它实际上是JavaScript中的_object_。使用名称“哈希”和任何其他的是外国术语。除了“list” - 这只是_wrong_术语,因为列表包含有序值,而不是无序键值对。 – vlaz

相关问题