【问题标题】:push array object to new object将数组对象推送到新对象
【发布时间】:2018-01-31 15:49:55
【问题描述】:

我有以下数据:

var data = [{
    County: "Cork",
    date: '1/1/2018',
    num: 100
}, {
    County: "Roscommon",
    date: '07/10/2017',
    num: 27
}];
var Counties = {};
for (County in data) {
    for (var i = 0; i <= 1; i++) {
        Counties[data[i].County] = data[i].County;
    }
}

这会返回{County: "Roscommon"}

如何让我的代码返回数组对象中的每个县,以便我最终得到:

{County: "Cork"}
{County: "Roscommon"}

【问题讨论】:

  • 为什么第二个循环,你总是设置为相同的键,你也不能有重复键的数组
  • 我认为这是访问数据的最佳方式。但如果有其他更好的方法 - 那会很棒!
  • 你可以只拥有带有编号索引的数组
  • 它必须是一个对象,因为我需要将它映射到其他地方,即将它绑定到一个对象中
  • 而不是使用数组索引

标签: javascript arrays object d3.js


【解决方案1】:

您可以使用array#map。您可以使用array#map 对数组进行迭代,在其回调函数中,您可以使用对象解构语法来获取County 值,并使用对象简写符号创建具有County 值的对象。

var data = [{ County: "Cork", date:'1/1/2018', num:100 },{ County: "Roscommon", date: '07/10/2017', num:27 }],
    counties = data.map(({County}) => ({County}));
console.log(counties);

【讨论】:

  • 您的答案可以在代码旁边使用一些解释来解释代码的作用。
  • 用一些解释更新了答案。
【解决方案2】:

你可以使用array#map函数。

const countyArray = data.map(el => {el.County})

const counties = [];
for (let county of data) {
   counties.push({ County })
}

作为一个对象:

const counties = {}; 

for (let element of data) { 
counties[element.County] = {County: element.County};
}

【讨论】:

  • 不,我需要这个:{ { "County": "Cork"}, {"County": "Roscommon"} }
  • 我的意思是,我需要取回一个对象而不是数组。这有意义吗?
  • JS 对象如下所示:{name: value, name: value}。在这种情况下,您需要这样做:const counties = {}; for (let element of data) { counties[element.County] = County; }
  • 能否输入完整的代码,因为我不确定如何实现。非常感谢
  • var data = [{ County: "Cork", date: '1/1/2018', num: 100 }, { County: "Roscommon", date: '07/10/2017' , 编号: 27 }];常量县 = {}; for (let element of data) {counties[element.County] = {County: element.County}; } console.log(counties) 另见:jsbin.com/wacibejuhe/edit?js,console,output
【解决方案3】:

你是这个意思吗?一个包含只有县值的对象的数组?

var data = [{
    County: "Cork",
    date:'1/1/2018',
    num:100
  },{
    County: "Roscommon",
    date: '07/10/2017',
    num:27
  }];
var Counties=data.map(function(a){return {County:a.County}});
console.log(Counties);

或者这个,只有县名的数组?

var data = [{
    County: "Cork",
    date:'1/1/2018',
    num:100
  },{
    County: "Roscommon",
    date: '07/10/2017',
    num:27
  }];
var Counties=data.map(function(a){return a.County});
console.log(Counties);

对于数组中的简单数据映射,我建议您深入研究 map 的功能,这使得“清理”数组中的数据变得非常容易,以便以您想要的格式挑选您想要的花絮。

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/map

如果您需要唯一值,则需要几个额外的步骤

var data = [{
    County: "Cork",
    date:'1/1/2018',
    num:100
  },{
    County: "Roscommon",
    date: '07/10/2017',
    num:27
  },
  {
    County: "Roscommon",
    date: '17/10/2017',
    num:34
  }
  ];
console.log("#nofilter");

var counties=data.map(function(a){
                        return a.County
                      });

console.log(counties);

console.log("as filtered array");

var counties=data.map(function(a){
                     return a.County;
                  })
                 .filter(function(value, index, self) { 
                    return self.indexOf(value) === index;
                 });
console.log(counties);

console.log("as filtered objects");

var counties=data.map(function(a){return a.County})
                 .filter(function(value, index, self) { 
                     return self.indexOf(value) === index;
                 })
                 .map(function(a) {
                    return {County: a}
                 });
                 
console.log(counties);

【讨论】:

    【解决方案4】:

    您的代码有一些问题,我们来分析一下:

    您的方法:

    var Counties={};
    for (County in data){
      for (var i=0;i<=1;i++){
         Counties["County"]=data[i].County;
      }
    }
    

    关键字in 在这里没有很好地使用,因为该运算符返回数组中每个项目的索引data

    for (County in data)
                ^
    

    您不需要那个内部 for-loop,因为您可以直接迭代 data 数组 :-)

    for (County in data){
       for (var i=0;i<=1;i++){ // Remove that line
       ^
    

    正如您在问题中所说,您想要的输出是一个对象数组。所以你需要声明一个数组。

    var Counties={};
    ^
    

    看看这段代码 sn-p,它更简洁,符合你的逻辑:

    var data = [{
      County: "Cork",
      date: '1/1/2018',
      num: 100
    }, {
      County: "Roscommon",
      date: '07/10/2017',
      num: 27
    }];
    var array = [];
    
    for (c in data) {
       array.push({"County": data[c].County});
    }
    
    console.log(array);

    看到了吗?你的逻辑现在起作用了!

    使用reduce 函数的简短方法是:

    reduce 不会修改您的原始对象。

    var data = [{
        County: "Cork",
        date: '1/1/2018',
        num: 100
    }, {
        County: "Roscommon",
        date: '07/10/2017',
        num: 27
    }];
    
    var counties = data.reduce((a, c) => {
      return [...a, ...[{"county": c.County}]]
    }, []);
    
    console.log(JSON.stringify(data));
    console.log(JSON.stringify(counties));

    看到了吗?您原来的 Obj 没有被修改,而是创建了一个包含县的新数组。

    使用map 函数的另一种简短方法是:

    map 不会修改您的原始对象。

    var data = [{
        County: "Cork",
        date: '1/1/2018',
        num: 100
    }, {
        County: "Roscommon",
        date: '07/10/2017',
        num: 27
    }];
    
    var counties = data.map((c) => ({"county": c.County}));
    
    console.log(JSON.stringify(data));
    console.log(JSON.stringify(counties));

    看到了吗?您原来的 Obj 没有被修改,而是创建了一个包含县的新数组。

    资源

    【讨论】:

      【解决方案5】:

      可能最好的选择是像这样映射数据数组。 `

      var data = [{
          county: "Cork",
          date:'1/1/2018',
          num:100
        },{
          county: "Roscommon",
          date: '07/10/2017',
          num:27
        }];
      var counties=[];
      data.map(item => {
      var county = {county: item.county};
      counties.push(county);
      });
      

      `

      【讨论】:

        猜你喜欢
        • 2019-04-08
        • 1970-01-01
        • 2021-11-06
        • 1970-01-01
        • 2020-10-28
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多