I am doing check on three different variables which are holding array of strings like below.
var a = ["ghi",dwe"]
var b = ["ghsj"]
var c = ["gdjr"]
var result; // result array
I am checking each time if variable a,b,c are not undefined and if they are holding some value I am simply pushing a string for each variable in the result array.
Below is line of code for same.
if(a !== undefined && a.length > 0) {
result.push("Astring");
}
if(b !== undefined && b.length > 0) {
result.push("Bstring");
}
if(c!== undefined && c.length > 0) {
result.push("Cstring");
}
Expected Result should be if the var a,b,c are defined and non empty then result array variable should hold value like below
["Astring","BString","CString"]
Is there a more efficient way of describing this code.Here I am just checking each and every variable using if condition. Also , I am restricted in some ways as I am using a Rhino js engine ver 1.7.12.
CodePudding user response:
You could create an object with your initial data. Then iterate over it, and append the key (e.g. a
, b
or c
) if it matches your condition.
Here's a quick demo:
// Initial Data
const a = ['ghi', 'dwe'];
const b = ['ghsj'];
const c = ['gdjr'];
// Store intial within an array
const abc = {a, b, c};
const result = [];
// Append each data item that present, is array, and not empty
Object.keys(abc).forEach((letterKey) => {
const content = abc[letterKey];
if(Array.isArray(content) && content.length > 0) {
result.push(letterKey);
}
});
// Print results
console.log(result);
CodePudding user response:
first you will store the 3 variables in a list then you loop over them with map
var a = ["ghi","dwe"]
var b = ["ghsj"]
var c = ["gdjr"]
var result = [];
let list = [a,b,c]
list.map(item => {
if(item !== undefined && a.length > 0) {
result.push(item)
}
})
CodePudding user response:
I think the most efficient way is a raw for
loop.
var a = ["ghi","dwe"]
var b = ["ghsj"]
var c = ["gdjr"]
var result = [];
const items = [a,b,c]
const itemCount = items.length
let resultingItems = []
for (let i = 0; i < itemCount; i ) {
if(items[i] !== undefined && items[i].length > 0) {
resultingItems .push(items[i])
}
Raw for
loop might be more efficient as the map
function creates a new array populated with the results of calling a provided function on every element in the calling array.
CodePudding user response:
I'd use an object instead of an array, so that the result-elements can be specified.
var a = ["ghi","dwe"]
var b = ["ghsj"]
var c = ["gdjr"]
mapping = {
"AString": a,
"BString": b,
"CString": c
}
var result = []; // result array
for (let [key, value] of Object.entries(mapping)) {
if (value !== undefined && value.length > 0) {
result.push(key)
}
}
console.log(result)
CodePudding user response:
I think the best way is for you to define a function:
var a = ["ghi","dwe"];
var b = [];
var c = ["gdjr"];
var result = [];
function pushToResult(variable, value){
if(typeof variable != 'undefined' && variable.length > 0)
result.push(value)
}
pushToResult(a, "Astring");
pushToResult(b, "Bstring");
pushToResult(c, "Cstring");
console.log(result);
If you want push the variable name into the result, then:
var a = ["ghi","dwe"];
var b = [];
var c = ["gdjr"];
var result = [];
function pushToResult(variable, value){
if(typeof variable != 'undefined' && variable.length > 0)
result.push(value)
}
pushToResult(a, Object.keys({a}).pop());
pushToResult(b, Object.keys({b}).pop());
pushToResult(c, Object.keys({c}).pop());
console.log(result);