JS得到一个新的数组只包含一定的价值
元素所以我有这个数组JS得到一个新的数组只包含一定的价值
"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是事先不知道的。我只是将这个数组作为结构示例。
回答:
你可以用一个散列表对它进行分组。
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);
.as-console-wrapper { max-height: 100% !important; top: 0; }
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);
.as-console-wrapper { max-height: 100% !important; top: 0; }
回答:
您可以使用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);
回答:
只是遍历所有元素,并检查这样的特殊价值:
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;
}
回答:
如果你知道这个值,你可以使用JavaScript的'过滤器'功能。
var specificVal = 555; var newArray = myArray.filter(function(val) {
return val.specialValue === specificVal;
});
回答:
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
回答:
我们将第一组通过其特殊价值的元素:
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
留作练习。这里有很多例子,或者你可以使用下划线的_.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;
}
回答:
这会给你specialValues作为键的HashMap和它们的匹配项的数组作为值
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);
以上是 JS得到一个新的数组只包含一定的价值 的全部内容, 来源链接: utcz.com/qa/262336.html