admin管理员组文章数量:1390440
I have been trying (and struggling) to figure out how I am able to split an array of objects, based on a key value pair
Long story short, I have a list of stations that a train is calling at, and need to separate the stations previous calling points, and the stations future calling points.
The data i'm working with looks like this:
[{station_code: "SOC", station_name: "Southend Central" },
{station_code: "WCF", station_name: "Westcliff On Sea" },
{station_code: "CHW", station_name: "Chalkwell" },
{station_code: "LES", station_name: "Leigh On Sea" },
{station_code: "BEF", station_name: "Benfleet" },
{station_code: "PSE", station_name: "Pitsea" },
{station_code: "BSO", station_name: "Basildon" }]
I'd like to have two new arrays that are split at, for example Leigh On Sea.. like this:
previous stops:
[{station_code: "SOC", station_name: "Southend Central" },
{station_code: "WCF", station_name: "Westcliff On Sea" },
{station_code: "CHW", station_name: "Chalkwell" }]
subsequent stops:
[{station_code: "BEF", station_name: "Benfleet" },
{station_code: "PSE", station_name: "Pitsea" },
{station_code: "BSO", station_name: "Basildon" }]
it would also help to potentially return the current station (leigh on sea) as well as a separate array with the object in it if possible...
I have e across this, however i cant think how i can adjust this to look in to the object to find the station name:
const getAllAfter = (current) => {
var myArr = new Array("alpha", "beta", "gamma", "delta");
var i = myArr.indexOf(current);
return i > -1 ? myArr.slice(0, i) : [];
};
Thanks in advance! :)
I have been trying (and struggling) to figure out how I am able to split an array of objects, based on a key value pair
Long story short, I have a list of stations that a train is calling at, and need to separate the stations previous calling points, and the stations future calling points.
The data i'm working with looks like this:
[{station_code: "SOC", station_name: "Southend Central" },
{station_code: "WCF", station_name: "Westcliff On Sea" },
{station_code: "CHW", station_name: "Chalkwell" },
{station_code: "LES", station_name: "Leigh On Sea" },
{station_code: "BEF", station_name: "Benfleet" },
{station_code: "PSE", station_name: "Pitsea" },
{station_code: "BSO", station_name: "Basildon" }]
I'd like to have two new arrays that are split at, for example Leigh On Sea.. like this:
previous stops:
[{station_code: "SOC", station_name: "Southend Central" },
{station_code: "WCF", station_name: "Westcliff On Sea" },
{station_code: "CHW", station_name: "Chalkwell" }]
subsequent stops:
[{station_code: "BEF", station_name: "Benfleet" },
{station_code: "PSE", station_name: "Pitsea" },
{station_code: "BSO", station_name: "Basildon" }]
it would also help to potentially return the current station (leigh on sea) as well as a separate array with the object in it if possible...
I have e across this, however i cant think how i can adjust this to look in to the object to find the station name:
const getAllAfter = (current) => {
var myArr = new Array("alpha", "beta", "gamma", "delta");
var i = myArr.indexOf(current);
return i > -1 ? myArr.slice(0, i) : [];
};
Thanks in advance! :)
Share Improve this question asked Jan 28, 2021 at 22:04 norrisollienorrisollie 3311 gold badge6 silver badges18 bronze badges 1- PS: you don't need an array for the current station ;) – Roko C. Buljan Commented Jan 28, 2021 at 22:08
2 Answers
Reset to default 6Use Array.findIndex()
to find the index of separating item, and then use Array.slice()
to get the array before, the item, and the array after.
const splitAt = (predicate, arr) => {
const index = arr.findIndex(predicate);
return [
arr.slice(0, index),
arr[index],
arr.slice(index + 1)
];
};
const data = [{"station_code":"SOC","station_name":"Southend Central"},{"station_code":"WCF","station_name":"Westcliff On Sea"},{"station_code":"CHW","station_name":"Chalkwell"},{"station_code":"LES","station_name":"Leigh On Sea"},{"station_code":"BEF","station_name":"Benfleet"},{"station_code":"PSE","station_name":"Pitsea"},{"station_code":"BSO","station_name":"Basildon"}];
const [before, separator, after] = splitAt(o => o.station_name === 'Leigh On Sea', data);
console.log({ before, separator, after });
I have a very sloppy idea so I don't know if you want to take it, but what you are suggesting is actually very similar to a built-in split
method in JS but that works with strings, so you could take your array, JSON.stringify()
it, and then take whichever stop you wanted to split it at, make that object a string as well, and then use your string object to split it into an array of separated string objects. Then simply remove the starting and ending brackets from the two array objects and parse it back into an object, voila you have achieved what you wanted
Example:
var arr = [{station_code: "SOC", station_name: "Southend Central" },
{station_code: "WCF", station_name: "Westcliff On Sea" },
{station_code: "CHW", station_name: "Chalkwell" },
{station_code: "LES", station_name: "Leigh On Sea" },
{station_code: "BEF", station_name: "Benfleet" },
{station_code: "PSE", station_name: "Pitsea" },
{station_code: "BSO", station_name: "Basildon" }];
var objectToSplitAt = {station_code: "LES", station_name: "Leigh On Sea" };
var stringObjectToSplitAt = JSON.stringify(objectToSplitAt);
var stringArr = JSON.stringify(arr);
var ourSplitStringResult = stringArr.split(stringObjectToSplitAt + ",");
//Add the brackets to make it proper JSON
ourSplitStringResult[0] = ourSplitStringResult[0] + "]";
ourSplitStringResult[1] = "[" + ourSplitStringResult[1];
var ourFinalSplitArrayOfArrays = ourSplitStringResult.map((el)=>{
return JSON.parse(el);
});
本文标签: javascriptSplit an array of objects in to twobased on a value within the objectStack Overflow
版权声明:本文标题:javascript - Split an array of objects in to two, based on a value within the object - Stack Overflow 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.betaflare.com/web/1744704757a2620775.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论