Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/450.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 - Fatal编程技术网

Javascript 在对象中的多个数组中循环以在新数组中创建多个对象?

Javascript 在对象中的多个数组中循环以在新数组中创建多个对象?,javascript,arrays,Javascript,Arrays,在我的应用程序中,$scope.results=[{},{},{},{}….](是包含多个对象的数组) 其中一个对象的样例输出: 0: brand: "Confidential" group_id: "CRCLEBESP" id: "d703187ac59976b066c9b7ea01416bca" msrp: "0" name: "Clear Beyond Speaker Cable" price: "5510" product_type_unigram: "cable" sku: "CRCL

在我的应用程序中,$scope.results=[{},{},{},{}….](是包含多个对象的数组)

其中一个对象的样例输出:

0:
brand: "Confidential"
group_id: "CRCLEBESP"
id: "d703187ac59976b066c9b7ea01416bca"
msrp: "0"
name: "Clear Beyond Speaker Cable"
price: "5510"
product_type_unigram: "cable"
sku: "CRCLEBESP"
ss_msrp: (12) ["0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0"]
ss_msrp_max: "0"
ss_msrp_min: "0"
ss_name_sizes: "Cardas Clear Beyond Speaker Cable"
ss_price: (12) ["6840", "5510", "9500", "8170", "8170", "12160", "10830", "14820", "13490", "17480", "16150", "18810"]
ss_price_max: "18810"
ss_price_min: "5510"
stock_id: "171038"
sub_sku: (12) ["1.5PSPSP", "1PSPSP", "2.5PSPSP", "2PBNBN", "2PSPSP", "3.5PSPSP", "3PSPSP", "4.5PSPSP", "4PSPSP", "5.5PSPSP", "5PSPSP", "6PSPSP"]
uid: "171038"
__proto__: Object
这些对象包含3个数组,每个数组我都需要从“ss_msrp、ss_price和sub_sku”中提取值。每个对象中的每个数组长度相同。例如,对象0有3个数组,每个数组有12个索引长。对象1有3个数组,每个数组有6个索引长。对象3有3个数组,每个数组有8个索引,等等

我需要从每个数组中提取第[n]项,并将其放置到一个新对象中。每个对象将有3个键值对。例如:

ss_msrp = ["0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0"]
ss_price = ["6840", "5510", "9500", "8170", "8170", "12160", "10830", "14820", "13490", "17480", "16150", "18810"]
sub_sku = ["1.5PSPSP", "1PSPSP", "2.5PSPSP", "2PBNBN", "2PSPSP", "3.5PSPSP", "3PSPSP", "4.5PSPSP", "4PSPSP", "5.5PSPSP", "5PSPSP", "6PSPSP"]

object1 = { msrp: "0", price: "6840", sku: "1.5PSPSP" }
object2 = { msrp: "0", price: "5510", sku: "1PSPSP" }
object3 = { msrp: "0", price: "9500", sku: "2.5PSPSP" }
object4 = { msrp: "0", price: "8170", sku: "2PBNBN" }
我现在的代码如下所示:

let objects = []

for (let i=0; i < $scope.results[0].sub_sku.length; i++){   
    objects.push({
        sku: $scope.results[0].sub_sku[i],
        msrp: $scope.results[0].ss_msrp[i],
        price: $scope.results[0].ss_price[i]
        })
    }
for (let x=0; x < $scope.results.length; x++){
                for (let i=0; i < $scope.results[x].sub_sku.length; i++){   
                    objects.push({
                        sku: $scope.results[x].sub_sku[i],
                        msrp: $scope.results[x].ss_msrp[i],
                        price: $scope.results[x].ss_price[i]
                    })
                }
            }
let objects = []

for (let i=0; i < $scope.results[0].sub_sku.length; i++){    
    objects.push({
        sku: $scope.results[0].sub_sku[i],
        msrp: $scope.results[0].ss_msrp[i],
        price: $scope.results[0].ss_price[i]
        })
}
for (let j=0; j < $scope.results.length; j++){
    for (let i=0; i < $scope.results[j].sub_sku.length; i++){    
    objects.push({
        sku: $scope.results[j].sub_sku[i],
        msrp: $scope.results[j].ss_msrp[i],
        price: $scope.results[j].ss_price[i]
        })
    }
}
let objects=[]
对于(设i=0;i<$scope.results[0]。sub_sku.length;i++){
objects.push({
sku:$scope.results[0]。子单元sku[i],
msrp:$scope.results[0].ss_msrp[i],
价格:$scope.results[0].ss_价格[i]
})
}
当然,这只会返回第一个对象所需的结果。我尝试将其嵌套在另一个for循环中,如下所示:

let objects = []

for (let i=0; i < $scope.results[0].sub_sku.length; i++){   
    objects.push({
        sku: $scope.results[0].sub_sku[i],
        msrp: $scope.results[0].ss_msrp[i],
        price: $scope.results[0].ss_price[i]
        })
    }
for (let x=0; x < $scope.results.length; x++){
                for (let i=0; i < $scope.results[x].sub_sku.length; i++){   
                    objects.push({
                        sku: $scope.results[x].sub_sku[i],
                        msrp: $scope.results[x].ss_msrp[i],
                        price: $scope.results[x].ss_price[i]
                    })
                }
            }
let objects = []

for (let i=0; i < $scope.results[0].sub_sku.length; i++){    
    objects.push({
        sku: $scope.results[0].sub_sku[i],
        msrp: $scope.results[0].ss_msrp[i],
        price: $scope.results[0].ss_price[i]
        })
}
for (let j=0; j < $scope.results.length; j++){
    for (let i=0; i < $scope.results[j].sub_sku.length; i++){    
    objects.push({
        sku: $scope.results[j].sub_sku[i],
        msrp: $scope.results[j].ss_msrp[i],
        price: $scope.results[j].ss_price[i]
        })
    }
}
for(设x=0;x<$scope.results.length;x++){
对于(设i=0;i<$scope.results[x].sub_sku.length;i++){
objects.push({
sku:$scope.results[x].子单元sku[i],
msrp:$scope.results[x].ss_msrp[i],
价格:$scope.results[x].ss_价格[i]
})
}
}
但我得到了以下错误: 无法读取未定义的属性“长度”


有人有什么想法吗?提前谢谢。

我认为您应该更正您编写的循环条件,
sub\u sku
是您必须获取长度的数组,而不是
sub\u sku[I]
,您的代码应该如下所示:

let objects = []

for (let i=0; i < $scope.results[0].sub_sku.length; i++){   
    objects.push({
        sku: $scope.results[0].sub_sku[i],
        msrp: $scope.results[0].ss_msrp[i],
        price: $scope.results[0].ss_price[i]
        })
    }
for (let x=0; x < $scope.results.length; x++){
                for (let i=0; i < $scope.results[x].sub_sku.length; i++){   
                    objects.push({
                        sku: $scope.results[x].sub_sku[i],
                        msrp: $scope.results[x].ss_msrp[i],
                        price: $scope.results[x].ss_price[i]
                    })
                }
            }
let objects = []

for (let i=0; i < $scope.results[0].sub_sku.length; i++){    
    objects.push({
        sku: $scope.results[0].sub_sku[i],
        msrp: $scope.results[0].ss_msrp[i],
        price: $scope.results[0].ss_price[i]
        })
}
for (let j=0; j < $scope.results.length; j++){
    for (let i=0; i < $scope.results[j].sub_sku.length; i++){    
    objects.push({
        sku: $scope.results[j].sub_sku[i],
        msrp: $scope.results[j].ss_msrp[i],
        price: $scope.results[j].ss_price[i]
        })
    }
}
let objects=[]
对于(设i=0;i<$scope.results[0]。sub_sku.length;i++){
objects.push({
sku:$scope.results[0]。子单元sku[i],
msrp:$scope.results[0].ss_msrp[i],
价格:$scope.results[0].ss_价格[i]
})
}
如果您想将逻辑应用于所有结果,您将有两个使用两个for循环,如下所示:

let objects = []

for (let i=0; i < $scope.results[0].sub_sku.length; i++){   
    objects.push({
        sku: $scope.results[0].sub_sku[i],
        msrp: $scope.results[0].ss_msrp[i],
        price: $scope.results[0].ss_price[i]
        })
    }
for (let x=0; x < $scope.results.length; x++){
                for (let i=0; i < $scope.results[x].sub_sku.length; i++){   
                    objects.push({
                        sku: $scope.results[x].sub_sku[i],
                        msrp: $scope.results[x].ss_msrp[i],
                        price: $scope.results[x].ss_price[i]
                    })
                }
            }
let objects = []

for (let i=0; i < $scope.results[0].sub_sku.length; i++){    
    objects.push({
        sku: $scope.results[0].sub_sku[i],
        msrp: $scope.results[0].ss_msrp[i],
        price: $scope.results[0].ss_price[i]
        })
}
for (let j=0; j < $scope.results.length; j++){
    for (let i=0; i < $scope.results[j].sub_sku.length; i++){    
    objects.push({
        sku: $scope.results[j].sub_sku[i],
        msrp: $scope.results[j].ss_msrp[i],
        price: $scope.results[j].ss_price[i]
        })
    }
}
for(设j=0;j<$scope.results.length;j++){
对于(设i=0;i<$scope.results[j].sub_sku.length;i++){
objects.push({
sku:$scope.results[j].子单元sku[i],
msrp:$scope.results[j].ss_msrp[i],
价格:$scope.results[j].ss_价格[i]
})
}
}

这是您试图获得的输出吗

//定义源数组(相当于“$scope.result”)
常数threeArrsPerObj=[
{
ss_msrp:[“0”、“0”、“0”、“0”],
不锈钢价格:[“6840”、“5510”、“9500”、“8170”],
sub_sku:[“1.5PSPP”、“1PSPP”、“2.5PSPP”、“2PBNBN”]
},
{
ss_msrp:[“0”、“0”、“0”、“0”],
不锈钢价格:[“8170”、“12160”、“10830”、“14820”],
sub_sku:[“2PSPP”、“3.5PSPP”、“3PSPP”、“4.5PSPP”]
},
{
ss_msrp:[“0”、“0”、“0”、“0”],
不锈钢价格:[“13490”、“17480”、“16150”、“18810”],
sub_sku:[“4PSPP”、“5.5PSPP”、“5PSPP”、“6PSSP”]
}
];
//定义目标数组(相当于“对象”)
常量multipleObjsPerar=[];
//在源数组中循环并处理每个对象
forEach(对象=>{
//定义用于当前正在处理的对象的数组
常数
msrpArr=obj.ss_msrp,
priceArr=对象价格,
skuArr=obj.sub_sku,
//结果数组将是源对象的新版本
//**如果要生成结果对象,请使用`resultObj={}`
结果r=[];
//结果bj={};
//通过msrp阵列的循环(可以使用3个阵列中的任意一个,b/c,其长度相同)
msrpArr.forEach((_,index)=>{/``存储元素(我们不使用该元素)
//为正在处理的对象定义要添加到结果数组中的新对象
//并将每个相关数组中的第n个元素存储在新对象的属性中
常数newObj={
msrp:msrpArr[索引],
价格:priceArr[指数],
sku:skuArr[索引]
};
//将特定于索引的对象添加到curreny源对象的结果数组中
//**如果要生成结果对象,请使用`resultObj[“prop”+index]=newObj`
结果推(newObj);
//resultObj[“prop”+索引]=newObj;
});
//将源对象的数组版本推送到目标数组
//**如果要生成结果对象,请按resutObj
多目标推送(结果器);
//多目标推送(resultObj);
});
//记录目标数组的内容,每次记录一个元素
multipleObjsPerArr.forEach((子阵列,索引)=>{
log(“\n对象包括数组(#“+(索引+1)+”)转换为对象数组:”;
控制台日志(子阵列);

});假设您的输入在一个数组中有两个对象

例如:

let examples=[
    {
    brand: "Confidential",
    group_id: "CRCLEBESP",
    id: "d703187ac59976b066csds9b7ea01416bca",
    msrp: "0",
    name: "Clear Beyond Speaker Cable",
    price: "5510",
    product_type_unigram: "cable",
    sku: "CRCLEBESP",
    ss_msrp:["0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0"],
    ss_msrp_max: "0",
    ss_msrp_min: "0",
    ss_name_sizes: "Cardas Clear Beyond Speaker Cable",
    ss_price:["6840", "5510", "9500", "8170", "8170", "12160", "10830", "14820", "13490", "17480", "16150", "18810"],
    ss_price_max: "18810",
    ss_price_min: "5510",
    stock_id: "171038",
    sub_sku:["1.5PSPSP", "1PSPSP", "2.5PSPSP", "2PBNBN", "2PSPSP", "3.5PSPSP", "3PSPSP", "4.5PSPSP", "4PSPSP", "5.5PSPSP", "5PSPSP", "6PSPSP"],
    uid: "171038",
},
{
    brand: "Confidential",
    group_id: "CRCLEBESP",
    id: "d703187ac59976b066c9b7ea01416bca",
    msrp: "0",
    name: "Clear Beyond Speaker Cable",
    price: "5510",
    product_type_unigram: "cable",
    sku: "CRCLEBESP",
    ss_msrp:["0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0"],
    ss_msrp_max: "0",
    ss_msrp_min: "0",
    ss_name_sizes: "Cardas Clear Beyond Speaker Cable",
    ss_price:["6840", "5510", "9500", "8170", "8170", "12160", "10830", "14820", "13490", "17480", "16150", "18810"],
    ss_price_max: "18810",
    ss_price_min: "5510",
    stock_id: "171038",
    sub_sku:["1.5PSPSP", "1PSPSP", "2.5PSPSP", "2PBNBN", "2PSPSP", "3.5PSPSP", "3PSPSP", "4.5PSPSP", "4PSPSP", "5.5PSPSP", "5PSPSP", "6PSPSP"],
    uid: "171038",
}]
你可以处理两个案子

  • 如果您的对象数组包含2个相同的产品,并且您需要2个重复的对象,其中包括价格skumsrp,那么这就是解决方案之一
  • 2.如果您不想要重复的产品如果id是唯一的,那么您也可以这样做

    let result = {};
    examples.map(row=>{
        result[row.id]= row.ss_msrp.map((e,i)=>{
            return {
            msrp:row.ss_msrp[i],
            sku:row.sub_sku[i],
            price:row.ss_price[i]
            };
        });
    });
    
    Output:
    //console.log(result);
    // {d703187ac59976b066c9b7ea01416bca: (12) [{…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}]}
    

    我尝试了这个,但仍然得到相同的错误:无法读取未定义的属性“length”。谢谢您的回复。奇怪的是,当我运行您的代码段时,这是有效的,但是当我用我的应用程序尝试它时,我得到了“TypeError:无法读取未定义的属性“0”。您是否有一个调试器或控制台来告诉您是哪一行导致了错误?(除了您提供的代码之外,我看不到任何代码,所以我看不到其他代码