Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/474.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 将数组重新映射到对象_Javascript_Arrays_Object_Dictionary - Fatal编程技术网

Javascript 将数组重新映射到对象

Javascript 将数组重新映射到对象,javascript,arrays,object,dictionary,Javascript,Arrays,Object,Dictionary,我有这样一个数组: var records = [{ "field1": "dogs", "field2": "poodle" }, { "field1": "dogs", "field2": "alsatian" }, { "field1": "dogs", "field2": "chowchow" }, { "field1": "dogs", "field2": "schnauzer" }, { "field1": "cats", "field2":

我有这样一个数组:

var records = [{
  "field1": "dogs",
  "field2": "poodle"
}, {
  "field1": "dogs",
  "field2": "alsatian"
}, {
  "field1": "dogs",
  "field2": "chowchow"
}, {
  "field1": "dogs",
  "field2": "schnauzer"
}, {
  "field1": "cats",
  "field2": "siamese"
}, {
  "field1": "cats",
  "field2": "persian"
}, {
  "field1": "fish",
  "field2": "guppy"
}, {
  "field1": "fish",
  "field2": "tiger barb"
}]
我想迭代数组并创建一个新的数组,这样我就可以像这样访问它

var Pets = [{
  "type": "dogs",
  "breeds": ["poodle", "alsatian", "chowchow", "schnauzer"]
}, {
  "type": "cats",
  "breeds": ["siamese", "persian"]
}, {
  "type": "fish",
  "breeds": ["guppy", "tiger barb"]
}]
我试图做一个for循环,但它不起作用,因为我在这样的数组中使用I+1

var thispet = {};
var Pets = [];

thispet.type = records[0].field1;
Pets.push(thispet);

for (i = 1; i < records.length; i++) {
  if (Pets[i - 1].type != records[i].field1) {
    thispet.type = records[i] field1;
    Pets.push(thispet);
  }
}
var thispet={};
var=[];
thispet.type=记录[0]。字段1;
宠物。推(这个宠物);
对于(i=1;i
但不知何故,Pets[i-1]类型无法识别为对象


我想首先根据记录中的3种宠物类型在宠物阵列中创建3个对象,然后对第二顺序的品种进行排序(使用push-in-array应该更容易。我有一个很大的记录,所以循环将非常有用。

首先按类型对宠物进行分组,然后将结果重新格式化为一个阵列会简单得多:

var group, pets = [], groups = {};
for (var i = 0; i < records.length; ++i) {
    group = groups[records[i].field1] || groups[records[i].field1] = [];
    group.push(records[i].field2);
}

for (var type in groups) {
    if (!groups.hasOwnProperty(type)) continue; // just to be on the safe side
    pets.push({ type: type, breeds: groups[type] });
}
var组,pets=[],groups={};
对于(变量i=0;i

.hasOwnProperty
检查是为了避免第三方代码带来不愉快的惊喜。

首先按类型将宠物分组,然后将结果重新格式化为一个数组会简单得多:

var group, pets = [], groups = {};
for (var i = 0; i < records.length; ++i) {
    group = groups[records[i].field1] || groups[records[i].field1] = [];
    group.push(records[i].field2);
}

for (var type in groups) {
    if (!groups.hasOwnProperty(type)) continue; // just to be on the safe side
    pets.push({ type: type, breeds: groups[type] });
}
var组,pets=[],groups={};
对于(变量i=0;i

.hasOwnProperty
检查是为了避免第三方代码带来不愉快的惊喜。

ECMA5中可能的解决方案

var记录=[{
“场1”:“狗”,
“场2”:“贵宾犬”
}, {
“场1”:“狗”,
“字段2”:“阿尔萨斯”
}, {
“场1”:“狗”,
“字段2”:“chow”
}, {
“场1”:“狗”,
“场2”:“雪纳瑞”
}, {
“领域1”:“猫”,
“字段2”:“暹罗语”
}, {
“领域1”:“猫”,
“字段2”:“波斯语”
}, {
“场1”:“鱼”,
“字段2”:“孔雀鱼”
}, {
“场1”:“鱼”,
“字段2”:“老虎倒钩”
}],
x=记录。减少(功能(acc,记录){
如果(!acc[记录字段1]){
acc[记录字段1]=[];
}
if(acc[record.field1].indexOf(record.field2)=-1){
acc[record.field1].push(record.field2);
}
返回acc;
}, {}),
y=对象。键(x)。映射(函数(键){
返回{
类型:键,
品种:这个[钥匙]
};
},x);
document.getElementById('out').textContent=JSON.stringify(y,null,2);

ECMA5中可能的解决方案

var记录=[{
“场1”:“狗”,
“场2”:“贵宾犬”
}, {
“场1”:“狗”,
“字段2”:“阿尔萨斯”
}, {
“场1”:“狗”,
“字段2”:“chow”
}, {
“场1”:“狗”,
“场2”:“雪纳瑞”
}, {
“领域1”:“猫”,
“字段2”:“暹罗语”
}, {
“领域1”:“猫”,
“字段2”:“波斯语”
}, {
“场1”:“鱼”,
“字段2”:“孔雀鱼”
}, {
“场1”:“鱼”,
“字段2”:“老虎倒钩”
}],
x=记录。减少(功能(acc,记录){
如果(!acc[记录字段1]){
acc[记录字段1]=[];
}
if(acc[record.field1].indexOf(record.field2)=-1){
acc[record.field1].push(record.field2);
}
返回acc;
}, {}),
y=对象。键(x)。映射(函数(键){
返回{
类型:键,
品种:这个[钥匙]
};
},x);
document.getElementById('out').textContent=JSON.stringify(y,null,2);

好的,我来试试。好的,我来试试。