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

回到顶部