Javascript JS获得一个新数组,其中只包含包含特定值的元素
所以我有这个数组Javascript JS获得一个新数组,其中只包含包含特定值的元素,javascript,arrays,Javascript,Arrays,所以我有这个数组 "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
"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做
编辑:特殊值是事先不知道的。我只给出这个数组作为结构示例。您可以使用
array.prototype.reduce()
var myArray=[{
“特殊价值”:111,
“其他值”:[“数组”]
}, {
“特殊价值”:555,
“其他值”:{}
}, {
“特殊价值”:111,
“其他值”:“abc”
}, {
“特殊价值”:555,
“其他值”:123
}];
var res=myArray.reduce((obj,prop)=>({specialValue:key}=prop)
,obj[key]=obj[key]?[…obj[key],prop]:[prop],obj),{});
控制台日志(res)代码>您可以使用Array.prototype.reduce()
var myArray=[{
“特殊价值”:111,
“其他值”:[“数组”]
}, {
“特殊价值”:555,
“其他值”:{}
}, {
“特殊价值”:111,
“其他值”:“abc”
}, {
“特殊价值”:555,
“其他值”:123
}];
var res=myArray.reduce((obj,prop)=>({specialValue:key}=prop)
,obj[key]=obj[key]?[…obj[key],prop]:[prop],obj),{});
控制台日志(res)代码>只需迭代所有元素并检查特殊值,如下所示:
var myArray=[
{
“特殊价值”:111,
//其他值、数组、对象等
},
{
“特殊价值”:555,
//其他值、数组、对象等
},
{
“特殊价值”:111,
//其他值、数组、对象等
},
{
“特殊价值”:555,
//其他值、数组、对象等
},
];
var结果=pickBySpecialValue(myArray,111);
控制台日志(结果);
函数pickBySpecialValue(数组、specialValue){
var matchingItems=[];
for(var i=0;i }
只需迭代所有元素并检查特殊值,如下所示:
var myArray=[
{
“特殊价值”:111,
//其他值、数组、对象等
},
{
“特殊价值”:555,
//其他值、数组、对象等
},
{
“特殊价值”:111,
//其他值、数组、对象等
},
{
“特殊价值”:555,
//其他值、数组、对象等
},
];
var结果=pickBySpecialValue(myArray,111);
控制台日志(结果);
函数pickBySpecialValue(数组、specialValue){
var matchingItems=[];
for(var i=0;i }
如果知道该值,可以使用JavaScript的“过滤器”功能
var specificVal = 555;
var newArray = myArray.filter(function(val) {
return val.specialValue === specificVal;
});
如果知道该值,可以使用JavaScript的“过滤器”函数
var specificVal = 555;
var newArray = myArray.filter(function(val) {
return val.specialValue === specificVal;
});
我们将首先根据元素的特殊值对元素进行分组:
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
只是一个练习。有很多这样的例子,或者你可以使用下划线的\uu.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;
}
我们将首先根据元素的特殊值对元素进行分组:
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
只是一个练习。有很多这样的例子,或者你可以使用下划线的\uu.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;
}
这将为您提供一个特殊值作为键的hashmap和一个匹配项作为值的数组
var myArray=[
{
“特殊价值”:111,
//其他值、数组、对象等
},
{
“特殊价值”:555,
//其他值、数组、对象等
},
{
“特殊价值”:111,
//其他值、数组、对象等
},
{
“特殊价值”:555,
//其他值、数组、对象等
},
];
特殊射线={};
对于(var i=myArray.length-1;i>=0;i--){
if(!Array.isArray(SpecialArray[myArray[i].specialValue])){
SpecialArray[myArray[i]。specialValue]=[];
}
SpecialArray[myArray[i].specialValue].push(myArray[i]);
}
控制台日志(特殊光线)代码>这将为您提供一个特殊值作为键的hashmap和一个匹配项作为值的数组
var myArray=[
{
“特殊价值”:111,
//其他值、数组、对象等
},
{
“特殊价值”:555,
//其他值、数组、对象等
},
{
“特殊价值”:111,
//其他值、数组、对象等
},
{
“特殊价值”:555,
//其他值、数组、对象等
},
];
特殊射线={};
对于(var i=myArray.length-1;i>=0;i--){
if(!Array.isArray(SpecialArray[myArray[i].specialValue])){
SpecialArray[myArray[i]。specialValue]=[];
}
SpecialArray[myArray[i].specialValue].push(myArray[i]);
}
控制台日志(特殊光线)代码>您可以使用哈希表将其分组
var object={“myArray”:[{'specialValue':111,propA:true},{'specialValue':555,propC:true},{'specialValue':111,propB:true},{'specialValue':555,propD:true},]},
grouped=object.myArray.reduce(函数(散列){
返回函数(r,a){
如果(!hash[a.specialValue]){
散列[