我有一个对象数组如下:
products = [
{
id: 1,
title: "Product 1",
specifications: {
price: 1.55,
discount: 15,
attributes: [
{
l1: 100,
l2: 80
height:200,
weight: 15,
parameters: [
{
id: 199199 // this is how I identify the parameter
size: 185 // this is what I want to change
}, ...
]
}, ...
]
}
}, ...
]
...以及我要应用的参数的一系列更改,例如:将大小更改为189,其中product.specifications.attributes.parameters.id == 199199。
我想在不夸大任何元素的情况下这样做,因为它们是Vue.js数据结构的一部分,它会破坏反应性。
我怎么能这样做?我愿意使用Underscore或lo-dash
答案 0 :(得分:1)
_.forEach(products, function(product) {
_.forEach(_.get(product, 'specifications.attributes', []), function(attribute) {
_.set(_.find(attribute.parameters, {id: 199199}), 'size', 189);
});
});
答案 1 :(得分:1)
这看起来很难看,但它很有效:
为了让它更具动态性,让我们使用变量:identifier
将是'199199'值,new_size
代表'189'值。
methods: {
updateRecord: function(identifier, new_size) {
this.products.map(function(product) {
product.specifications.attributes.map(function(attribute) {
attribute.parameters.map(function(parameter) {
if (parameter.id == identifier) parameter.size = new_size;
})
});
});
}
}
这是一个工作小提琴:https://jsfiddle.net/crabbly/eL7et9e8/
答案 2 :(得分:0)
我相信你想要的是强调findIndex()
- http://underscorejs.org/#findIndex。一旦找到要在其中应用更改的数组中的哪个元素(将嵌套的id与您要查找的内容进行比较),您就可以对该特定元素进行更改。