javascript - es6 code broken in es5 -
i have been trying translate code es6 es5 because of framework restrictions @ work... although have been quite struggling locate problem is. reason code not work quite same, , there no errors either ...
can tell me if have translated ?
this es6 code :
function filterfunction(items, filters, stringfields = ['title', 'description'], angular = false) { // filter keys of filters parameter const filterkeys = object.keys(filters); // set mutable filtered object items let filtered; // angular doesn't deep clones... *sigh* if (angular) { filtered = items; } else { filtered = _.clonedeep(items); } // each key in supplied filters (let key of filterkeys) { if (key !== 'textinput') { filtered = filtered.filter(item => { // make sure have filter by... if (filters[key].length !== 0) { return _.intersection(filters[key], item[key]).length >= 1; } return true; }); } // if we're @ textinput, handle things differently else if (key === 'textinput') { filtered = filtered.filter(item => { let searchstring = ""; // each field specified in strings array, build string search through (let field of stringfields) { // handle arrays differently if (!array.isarray(item[field])) { searchstring += `${item[field]} `.tolowercase(); } else { searchstring += item[field].join(' ').tolowercase(); } } // return item if string matches our input return searchstring.indexof(filters[key].tolowercase()) !== -1; }); } } return filtered; }
and code translated partially 99% work ..
function filterfunction(items, filters, stringfields, angular) { // filter keys of filters parameter var filterkeys = object.keys(filters); // set mutable filtered object items var filtered; // angular doesn't deep clones... *sigh* if (angular) { filtered = items; } else { filtered = _.clonedeep(items); } // each key in supplied filters (var key = 0 ; key < filterkeys.length ; key ++) { if (filterkeys[key] !== 'textinput') { filtered = filtered.filter( function(item) { // make sure have filter by... if (filters[filterkeys[key]].length !== 0) { return _.intersection(filters[filterkeys[key]], item[filterkeys[key]]).length >= 1; } return true; }); } // if we're @ textinput, handle things differently else if (filterkeys[key] === 'textinput') { filtered = filtered.filter(function(item) { var searchstring = ""; // each field specified in strings array, build string search through (var field = 0; field < stringfields.length; field ++) { // handle arrays differently console.log(field); if (!array.isarray(item[stringfields[field]])) { searchstring += item[stringfields[field]] + ' '.tolowercase(); } else { searchstring += item[stringfields[field]].join(' ').tolowercase(); } } // return item if string matches our input return searchstring.indexof(filters[filterkeys[key]].tolowercase()) !== -1; }); } } return filtered; }
these 2 lines
searchstring += `${item[field]} `.tolowercase(); searchstring += item[stringfields[field]] + ' '.tolowercase();
are not equivalent indeed. apply tolowercase
method on parts of string, you'll need wrap es5 concatenation in parenthesis:
searchstring += (item[stringfields[field]] + ' ').tolowercase();
or, blanks cannot lowercased anyway, use
searchstring += item[stringfields[field]].tolowercase() + ' ';
Comments
Post a Comment