Select 不同的子数组属性 LoDash
Select distinct child array properties LoDash
模型结构如下:
prods: [{
code: 'ABC123',
name: 'Product 1',
variants[{
code: 'V123',
name 'Var 1'
}, {
code: 'V456',
name 'Var 2'
}, {
code: 'V789',
name 'Var 3'
}
]
}, {
code: 'DEF456',
name: 'Product 2',
variants[{
code: 'V098',
name 'Var 4'
}, {
code: 'V123',
name 'Var 1'
}, {
code: 'V123',
name 'Var 1'
}
]
}, {
code: 'XYZ123',
name: 'Product 3',
variants[{
code: 'V123',
name 'Var 1'
}, {
code: 'V456',
name 'Var 2'
}, {
code: 'V789',
name 'Var 3'
}
]
}
]
是否有可能获得一组独特的变体代码,所以希望输出给我:
[{code:'V123'},{code: 'V456'}, {code: 'V789'},{code: 'V098'}]
你可以链接在一起[=13=]:
_(prods)
.map('variants')
.flatten()
.uniqBy('code')
.map(i => _.pick(i, 'code'))
.value();
第二个 map()
调用并非绝对必要 - 它只是为了摆脱 name
属性 以匹配您请求的输出。
您可以使用 flatMap to get all variants, complemented with map and uniqBy 获取所有唯一代码。
var result = _(prods)
.flatMap('variants')
.uniqBy('code')
.map(_.partialRight(_.pick, 'code'))
.value();
var prods = [{
code: 'ABC123',
name: 'Product 1',
variants: [{
code: 'V123',
name: 'Var 1'
}, {
code: 'V456',
name: 'Var 2'
}, {
code: 'V789',
name: 'Var 3'
}]
}, {
code: 'DEF456',
name: 'Product 2',
variants: [{
code: 'V098',
name: 'Var 4'
}, {
code: 'V123',
name: 'Var 1'
}, {
code: 'V123',
name: 'Var 1'
}]
}, {
code: 'XYZ123',
name: 'Product 3',
variants: [{
code: 'V123',
name: 'Var 1'
}, {
code: 'V456',
name: 'Var 2'
}, {
code: 'V789',
name: 'Var 3'
}]
}];
var result = _(prods)
.flatMap('variants')
.uniqBy('code')
.map(_.partialRight(_.pick, 'code'))
.value();
console.log(result);
body > div { min-height: 100%; top: 0; }
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.4/lodash.js"></script>
模型结构如下:
prods: [{
code: 'ABC123',
name: 'Product 1',
variants[{
code: 'V123',
name 'Var 1'
}, {
code: 'V456',
name 'Var 2'
}, {
code: 'V789',
name 'Var 3'
}
]
}, {
code: 'DEF456',
name: 'Product 2',
variants[{
code: 'V098',
name 'Var 4'
}, {
code: 'V123',
name 'Var 1'
}, {
code: 'V123',
name 'Var 1'
}
]
}, {
code: 'XYZ123',
name: 'Product 3',
variants[{
code: 'V123',
name 'Var 1'
}, {
code: 'V456',
name 'Var 2'
}, {
code: 'V789',
name 'Var 3'
}
]
}
]
是否有可能获得一组独特的变体代码,所以希望输出给我:
[{code:'V123'},{code: 'V456'}, {code: 'V789'},{code: 'V098'}]
你可以链接在一起[=13=]:
_(prods)
.map('variants')
.flatten()
.uniqBy('code')
.map(i => _.pick(i, 'code'))
.value();
第二个 map()
调用并非绝对必要 - 它只是为了摆脱 name
属性 以匹配您请求的输出。
您可以使用 flatMap to get all variants, complemented with map and uniqBy 获取所有唯一代码。
var result = _(prods)
.flatMap('variants')
.uniqBy('code')
.map(_.partialRight(_.pick, 'code'))
.value();
var prods = [{
code: 'ABC123',
name: 'Product 1',
variants: [{
code: 'V123',
name: 'Var 1'
}, {
code: 'V456',
name: 'Var 2'
}, {
code: 'V789',
name: 'Var 3'
}]
}, {
code: 'DEF456',
name: 'Product 2',
variants: [{
code: 'V098',
name: 'Var 4'
}, {
code: 'V123',
name: 'Var 1'
}, {
code: 'V123',
name: 'Var 1'
}]
}, {
code: 'XYZ123',
name: 'Product 3',
variants: [{
code: 'V123',
name: 'Var 1'
}, {
code: 'V456',
name: 'Var 2'
}, {
code: 'V789',
name: 'Var 3'
}]
}];
var result = _(prods)
.flatMap('variants')
.uniqBy('code')
.map(_.partialRight(_.pick, 'code'))
.value();
console.log(result);
body > div { min-height: 100%; top: 0; }
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.4/lodash.js"></script>