首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >为JavaScript中对象中的键插入数组格式的值

为JavaScript中对象中的键插入数组格式的值
EN

Stack Overflow用户
提问于 2018-06-13 15:43:24
回答 4查看 54关注 0票数 0

我正在尝试将一个数组(带有电子邮件地址)转换为object。如何在一个key的值数组中插入值?

代码语言:javascript
复制
var list = [
  "john@yahoo.com", "rami@gmail.com",
  "josh@yahoo.com", "bale@gmail.com"
];

(function() {
  var obj1 = {};
  for (var a = 0, b = list.length; b > a; a++) {
    var str = list[a].split("@");
    var arr = [];
    arr.push(str[0]);
    if (!(str[1] in obj1)) {
      obj1[str[1]] = []; //arr.push(str[0])];
    }

    Object.values(obj1[str[1]]).push(str[0])

  };
  console.log(obj1);
})();
代码语言:javascript
复制
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

预期输出

代码语言:javascript
复制
    {
    "gmail.com" : ["a","b","c"],
    "yahoo.com" : ["de","e","f"]
    }

我还想添加如下内容

代码语言:javascript
复制
    {
    "gmail.com" : [3],//1+1+1
    "yahoo.com" : [4]//1+1+1+1
    }
EN

回答 4

Stack Overflow用户

发布于 2018-06-13 15:46:26

代码语言:javascript
复制
var list = [
  "john@yahoo.com", "rami@gmail.com",
  "josh@yahoo.com", "bale@gmail.com"
];
obj = {};
list.map(x => x.split('@')[1]).forEach(x => obj[x] = [])
list.forEach(email => obj[email.split('@')[1]].push(email))
console.log(obj)
/*
{
  "yahoo.com": [
"john@yahoo.com",
"josh@yahoo.com"
  ],
  "gmail.com": [
"rami@gmail.com",
"bale@gmail.com"
  ]
}
*/

解释:创建了一个空的对象obj。然后,我在list上迭代,并通过list.map(x => x.split('@')[1])检索了所有的域。

有了域之后,我将对象设置为具有结构{ 'yahoo.com': [], 'gmail.com': [] }

然后我再次迭代列表,如果域包含相应的部分,则添加电子邮件,给出结果对象。

编辑:也可以这样单次迭代完成:

代码语言:javascript
复制
var list = [
  "john@yahoo.com", "rami@gmail.com",
  "josh@yahoo.com", "bale@gmail.com"
]
obj = {}
list.forEach(email => {
  let domain = email.split('@')[1]
  if (!obj[domain]) obj[domain] = []
  if (obj[domain].indexOf(email) < 0) obj[domain].push(email)
})
console.log(obj)

在这里,我迭代列表,提取域,如果不存在,使用[]设置密钥,然后将电子邮件推送到该列表中。它还确保不会推送重复的电子邮件。

票数 1
EN

Stack Overflow用户

发布于 2018-06-13 15:51:39

如果在object中找到键,则可以简单地推送数组中的值,否则添加数组

代码语言:javascript
复制
var list = [
  "john@yahoo.com", "rami@gmail.com",
  "josh@yahoo.com", "bale@gmail.com"
];

(function() {
  var obj1 = {};
  for (var a = 0; a < list.length;  a++) {
    var str = list[a].split("@");
    if(obj1[str[1]]) {
        obj1[str[1]].push(list[a])
    } else {
        obj1[str[1]] = [list[a]]; //arr.push(str[0])];
    }
  };
  console.log(obj1);
})();
代码语言:javascript
复制
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

票数 0
EN

Stack Overflow用户

发布于 2018-06-13 15:52:09

您的代码几乎是正确的,只有一个小错误,更改您的行:

代码语言:javascript
复制
Object.values(obj1[str[1]]).push(str[0])

代码语言:javascript
复制
obj1[str[1]].push(list[a]);

它工作得很好。

代码语言:javascript
复制
var list = [
  "john@yahoo.com", "rami@gmail.com",
  "josh@yahoo.com", "bale@gmail.com"
];

(function() {
  var obj1 = {};
  for (var a = 0, b = list.length; b > a; a++) {
    var str = list[a].split("@");
    var arr = [];
    arr.push(str[0]);
    if (!(str[1] in obj1)) {
      obj1[str[1]] = []; //arr.push(str[0])];
    }

    obj1[str[1]].push(list[a]);

  };
  console.log(obj1);
})();
代码语言:javascript
复制
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50831666

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档