将数组对象推送到新对象

时间:2018-01-31 15:49:55

标签: javascript arrays object d3.js

我有以下数据:

vpaths {
    ["Headers"] = { "**.h", "**.hpp" },
    ["Sources/*"] = {"**.c", "**.cpp"},
    ["Docs"] = "**.md"
}

这会返回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"}

5 个答案:

答案 0 :(得分:4)

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

County

答案 1 :(得分:1)

您可以使用数组#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};
}

答案 2 :(得分:1)

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

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的功能,这样可以很容易地“清理”数组中的数据,以便以您想要的格式挑选和选择所需的花絮。 / p>

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);

答案 3 :(得分:1)

您的代码存在一些问题,让我们分析一下:

您的方法:

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={};
^

查看此代码段,它更干净并遵循您的逻辑:

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没有被修改,并且创建了一个带有县的新数组。

资源

答案 4 :(得分:0)

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

<li class="post-120 product type-product status-publish has-post-thumbnail 
category1 category2 category3 category4 pa_one pa_two...">

`