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]){
散列[