javascript - JS - Pushing data into JSON structure using forEach loops on Arrays -
i attempting extract json values (from structure called jsonwithlistofstatesandcounters) if matches element in inputted array (inputedjurisdictionarray). inputed array contains sting values include singular or multiple state names (i.e. var inputedjurisdictionarray = ["iowa", "california, indiana, delaware", "florida"]). singular state values in array handled @ end, multiple state values gets tricky. using split() in order turn them array can processed 1 one. anytime 1 of states inputed array matches "state" value in jsonwithlistofstatesandcounters, extracting json structure , pushing @ end of every block initial variable myjurisdictionjson. problem having once these foreach loops completed, still left original values in myjurisdictionjson, instead of val , counter should extracted. jsonwithlistofstatesandcounters contains values should match elements of inputedjurisdictionarray, information not being pushed myjurisdictionjson. doing wrong? tips/pointers helpful.
var myjurisdictionjson = [{ jurisdiction_val: 'jurisdiction_val', jurisdiction_counter: 'jurisdiction_counter' }]; inputedjurisdictionarray.foreach(function each(item) { if (array.isarray(item)) { item.foreach(each); } else { var jurisdictioninput = item; jsonwithlistofstatesandcounters.foreach(function each(item) { if (array.isarray(item)) { item.foreach(each); } else { if (jurisdictioninput.includes(",") === true){//checking if more 1 jurisdiction in string var jurisdictionarr = jurisdictioninput.split(", "); var jurisdictioncounter = item.jurisdictioncounter; var jurisdictionstate = item.jurisdictionstate; jurisdictionarr.foreach(function(element) { if (myjurisdictionjson.jurisdiction_counter == 'jurisdiction_counter'){ // if nothing pushed our predefined json object if (jurisdictionstate.tolowercase() == trim(element.tolowercase())) { var jurisdictionjson_inner = { jurisdiction_val: element, jurisdiction_counter: jurisdictioncounter }; myjurisdictionjson.push(jurisdictionjson_inner); return; } }else if (myjurisdictionjson.jurisdiction_counter != 'jurisdiction_counter'){ // if item has been pushed myjurisdictionjson, append next items var jurisdictioncounter = item.jurisdictioncounter; var jurisdictionstate = item.jurisdictionstate; if (jurisdictionstate.tolowercase() == trim(jurisdictioninput.tolowercase())) { jurisdictionjson_inner.jurisdiction_val = jurisdictionjson_inner.jurisdiction_val + ", " + jurisdictioninput; jurisdictionjson_inner.jurisdiction_counter = jurisdictionjson_inner.jurisdiction_counter + ", " + jurisdictioncounter; myjurisdictionjson.push(jurisdictionjson_inner); return; } } }); } else{// if 1 jurisdiction state in jurisdictioninput string var jurisdictioncounter = item.jurisdictioncounter; var jurisdictionstate = item.jurisdictionstate; if (jurisdictionstate.tolowercase() == trim(jurisdictioninput.tolowercase())) { var jurisdictionjson_inner = { jurisdiction_val: jurisdictioninput, jurisdiction_counter: jurisdictioncounter }; myjurisdictionjson.push(jurisdictionjson_inner); return; } } } });
i'm not totally sure output want it's close.
// input data per example let inputedjurisdictionarray = [ 'iowa', 'california, indiana, delaware', 'florida' ]; // had make part up. it's missing example let jsonwithlistofstatesandcounters = [{ jurisdictioncounter: 2, jurisdictionstate: 'florida' }, { jurisdictioncounter: 4, jurisdictionstate: 'indiana' }, { jurisdictioncounter: 3, jurisdictionstate: 'texas' } ]; // first, fix inputedjurisdictionarray // reduce() loops on each array element // in case we're returning larger // array instead of reduced on method works // there's few things going on here. split, current element // on ','. taht gives array. call map() on it. // loops on each value of array , returns // array of same length. on each loop, trim() whitespace // make accumulator concatenate current array. // fat arrow ( => ) functions return results when it's 1 statement. inputedjurisdictionarray = inputedjurisdictionarray.reduce( (acc, curr) => acc.concat(curr.split(',').map(el => el.trim())), [] ); // can filter() jsonwithlistofstatesandcounters. loop through // each element. if jurisdictionstate property happens in // inputedjurisdictionarray array, add // myjurisdictionjson array. let myjurisdictionjson = jsonwithlistofstatesandcounters.filter(el => inputedjurisdictionarray['includes'](el.jurisdictionstate) ); console.log(myjurisdictionjson);
Comments
Post a Comment