所以我有这个数组
"myArray": [
{
'specialValue' : 111,
// other values,arrays,objects and so on
},
{
'specialValue' : 555,
// other values,arrays,objects and so on
},
{
'specialValue' : 111,
// other values,arrays,objects and so on
},
{
'specialValue' : 555,
// other values,arrays,objects and so on
},
]
我想制作一个新数组,其中只包含那些具有相同specialValue
的对象(及其所有属性)
请帮我用js
编辑:之前不知道specialValue。我只是将这个数组作为结构示例。
答案 0 :(得分:1)
您可以使用Array.prototype.reduce()
var myArray = [{
'specialValue': 111,
'other values': ["arrays"]
}, {
'specialValue': 555,
'other values': {}
}, {
'specialValue': 111,
'other values': "abc"
}, {
'specialValue': 555,
'other values': 123
}];
var res = myArray.reduce((obj, prop) => ({specialValue:key} = prop
, obj[key] = obj[key] ? [...obj[key], prop] : [prop], obj), {});
console.log(res);
答案 1 :(得分:1)
只需遍历所有元素并检查特殊值,如下所示:
var myArray = [
{
'specialValue' : 111,
// other values,arrays,objects and so on
},
{
'specialValue' : 555,
// other values,arrays,objects and so on
},
{
'specialValue' : 111,
// other values,arrays,objects and so on
},
{
'specialValue' : 555,
// other values,arrays,objects and so on
},
];
var result = pickBySpecialValue(myArray, 111);
console.log(result);
function pickBySpecialValue(array, specialValue){
var matchingItems = [];
for(var i=0;i < array.length;i++){
if(array[i].specialValue === specialValue){
matchingItems.push(array[i]);
}
}
return matchingItems;
}
答案 2 :(得分:1)
var myArray = [
{
'specialValue' : 111,
'name' : 'test1'
// other values,arrays,objects and so on
},
{
'specialValue' : 555,
'name' : 'test2'
// other values,arrays,objects and so on
},
{
'specialValue' : 111,
'name' : 'test3'
// other values,arrays,objects and so on
},
{
'specialValue' : 555,
'name' : 'test4'
// other values,arrays,objects and so on
},
];
var customArray = [];
myArray.forEach(function(element){
if(element.specialValue === 111) {
customArray.push(element);
}
});
console.log(customArray); // customArray contains the required value
答案 3 :(得分:1)
我们首先按照特殊值对元素进行分组:
grouped = groupBy(arr, e => e.specialValue);
这将返回
形式的内容{
111: [{specialValue: 111, other stuff}, {specialValue: 111, other stuff}],
555: [{specialValue: 555, other stuff}, {specialValue: 555, other stuff}]
}
接下来,我们将每个特殊值的所有对象合并为一个,假设您想要做的事情:
for (value in grouped) {
grouped[value] = Object.assign({}, ...grouped[value]);
}
这会给你类似的东西
{
111: {specialValue: 111, combined other stuff},
555: {specialValue: 555, combined other stuff}
}
如果您只想要上述值,请抓住它们:
Object.keys(result).map(key => result[key])
那会给你
[
{specialValue: 111, combined other stuff},
{specialValue: 555, combined other stuff}
]
写作groupBy
留作练习。 SO周围有很多例子,或者你可以使用下划线_.groupBy
。如果你想要一个真正简单的,那就是
function groupBy(arr, keyFunc) {
const result = {};
for (elt of arr) {
const key = keyFunc(elt);
if (!(key in result)) result[key] = [];
result[key].push(elt);
}
return result;
}
答案 4 :(得分:1)
这将为您提供specialValues的哈希映射作为键及其匹配条目的数组作为值
var myArray = [
{
'specialValue' : 111,
// other values,arrays,objects and so on
},
{
'specialValue' : 555,
// other values,arrays,objects and so on
},
{
'specialValue' : 111,
// other values,arrays,objects and so on
},
{
'specialValue' : 555,
// other values,arrays,objects and so on
},
];
specialArrays = {};
for (var i = myArray.length - 1; i >= 0; i--) {
if (!Array.isArray(specialArrays[myArray[i].specialValue])) {
specialArrays[myArray[i].specialValue] = [];
}
specialArrays[myArray[i].specialValue].push(myArray[i]);
}
console.log(specialArrays);
答案 5 :(得分:1)
您可以使用哈希表对其进行分组。
var object = { "myArray": [{ 'specialValue': 111, propA: true }, { 'specialValue': 555, propC: true }, { 'specialValue': 111, propB: true }, { 'specialValue': 555, propD: true }, ] },
grouped = object.myArray.reduce(function (hash) {
return function (r, a) {
if (!hash[a.specialValue]) {
hash[a.specialValue] = [];
r.push(hash[a.specialValue]);
}
hash[a.specialValue].push(a);
return r;
};
}(Object.create(null)), []);
console.log(grouped);
&#13;
.as-console-wrapper { max-height: 100% !important; top: 0; }
&#13;
ES6与Map
var object = { "myArray": [{ 'specialValue': 111, propA: true }, { 'specialValue': 555, propC: true }, { 'specialValue': 111, propB: true }, { 'specialValue': 555, propD: true }, ] },
grouped = object.myArray.reduce((map =>
(r, a) =>
(!map.has(a.specialValue) && map.set(a.specialValue, r[r.push([]) - 1]), map.get(a.specialValue).push(a), r))(new Map), []);
console.log(grouped);
&#13;
.as-console-wrapper { max-height: 100% !important; top: 0; }
&#13;
答案 6 :(得分:0)
如果您知道该值,则可以使用JavaScript的“过滤器”功能。
var specificVal = 555;
var newArray = myArray.filter(function(val) {
return val.specialValue === specificVal;
});