我有2个数组,这些数组中包含对象值:
-VariantArry,里面有26个数组。
-ProductArray,其中有6个数组
现在每个人都有一个匹配的ID,例如ProductArray[1].Id = 10029
现在这可以在VariantArray中进行匹配,例如在VariantArray中有一些名为VariantArray[1].Product.Id
的东西。
现在,如果匹配,我想将其推入具有ProductArray和VariantArray的数组中。现在一切正常我的问题是我最终得到的数组长度为23 ..我希望所有匹配的ID都在同一个数组中,所以我最终会得到6个数组,所有数据都具有与产品ID匹配的所有变体..目前为每个人创建一个新数组。
即
NewArray [1] .Product(保存我的产品数据)
NewArray [1] .Variant [6](将我的所有变种保存在另一个数组中)
Javascript代码:
var NewArray = [];
var p;
var va;
for (va = 0; va < VariantArray.length; va++) {
for (p = 0; p < ProductArray.length; p++) {
if (ProductArray[p].Id == VariantArray[va].Product.Id)
{
NewArray.push({ Product: ProductArray[p], Variants: VariantArray[va] });
}
}
}
有什么帮助以更好的方式使其正常工作? 谢谢 DOM
答案 0 :(得分:0)
这可能有所帮助:
var NewArray = [];
for (p = 0; p < ProductArray.length; p++) {
for (va = 0; va < VariantArray.length; va++) {
if (ProductArray[p].Id == VariantArray[va].Product.Id)
{
NewArray.push({ Product: ProductArray[p], Variants: VariantArray[va] });
break;
}
}
}
将内循环放在外面,当找到id时将内部循环放入。
答案 1 :(得分:0)
这是一个更详细的代码,我在运行中编码。希望它对你的目的有用。
var NewArray = [];
for (var p = 0; p < ProductArray.length; p++) {
for (var va = 0; va < VariantArray.length; va++) {
if (ProductArray[p].Id == VariantArray[va].Product.Id)
{
addVariant(NewArray, ProductArray[p], VariantArray[va]);
}
}
}
/**
* Finds the index of the product in the array
*/
function getProductIndex(array, productId) {
for (var i = 0; i < array.length; i++) {
if (array[i].Product.Id == productId) {
return i;
}
}
return -1;
}
/**
* Appends the variant if the product exists in the array. If not, it creates a new element for the given product and appends the variant.
*/
function addVariant(array, product, variant) {
var index = getProductIndex(array, product.Id);
if (index == -1) {
var variants = [];
variants.push(variant);
array.push({Product: product, Variants: variants});
}
else {
array[index].Variants.push(variant);
}
}
答案 2 :(得分:0)
ProductArray.forEach(function (product) {
results.push({
product: product,
variants: ProductArray.filter(function (variant) {
return variant.productId == product.productId
})
})
})
示例:http://jsfiddle.net/60rk1219/ 注意:示例的代码略有不同,因为作者在保存小提琴后编辑了问题。
在您的代码中,您尝试将VariantArray
的每个元素与ProductArray
的每个元素进行匹配,并且对于您找到的每个匹配,您都会设置值NewArray
。这样你就可以获得每场比赛的参赛作品。
要构建包含具有所有相应变体的每个产品的对象,您可以遍历ProductArray
并在VariantArray
中找到匹配的条目。