JS Snippets: Array: Difference between revisions

From WikiMLT
Spas (talk | contribs)
Spas (talk | contribs)
mNo edit summary
 
Line 1: Line 1:
<noinclude><!--[[Category:JavaScript|?]]-->{{ContentArticleHeader/JavaScript}}</noinclude>
<noinclude><!--[[Category:JavaScript|?]]-->{{ContentArticleHeader/JavaScript}}</noinclude>


== References ==
*Scrimba: [https://scrimba.com/learn/interviewchallenges JavaScript Interview Challenges]
*MLT GitHub: [https://github.com/metalevel-tech/exc-js-homework JavaScript Homework Tasks]
== Intersect two Arrays ==
== Intersect two Arrays ==
<syntaxhighlight lang="javascript" class="code-continue">
<syntaxhighlight lang="javascript" class="code-continue">

Latest revision as of 14:58, 11 March 2023

Ref­er­ences

In­ter­sect two Ar­rays

const arr1 = [1, 2, 3, 4];
const arr2 = [1, 2, 5, 6];
const intersection = arr1.filter(value => arr2.includes(value));
console.log(intersection);
(2) [1, 2]

Ref­er­ence: How to find the in­ter­sec­tion of ar­rays in JavaScript by Re­act­go

Get an Ar­ray el­e­ments by an Ar­ray of in­dex­es

const arr1 = ['a', 'b', 'c', 'd', 'e', 'f'];
const arr2 = [1, 3, 4, 0];
const intersection = arr1.filter((value, index) => arr2.includes(index)); // arr2.includes(index) ? true : false
console.log(intersection);
(3) ['a', 'b', 'd', 'e']

Re­move the Du­pli­cate Ar­ray Items

const arr = [
    "🥓 bacon", "🍳 eggs", "🫑 green peppers", "🥓 bacon",
    "🥓 bacon", "🧀 cheese", "🌶️ hot sauce","🥦 broccoli",
    "🧀 cheese", "🥦 broccoli", "🌶️ hot sauce", "🍳 eggs"
];
// Loop over the array,
// note newArr.includes(entry) is a nesting loop!
// Performance: 2.121855 ms
function removeDupesFromArray_1(arr) {
  const newArr = [];

  for (const entry of arr) {
    if (newArr.includes(entry)) continue;
    newArr.push(entry);
  }

  return newArr;
}
// Similar to the above but using filter
// Performance: 0.1757799 ms
function removeDupesFromArray_2(arr) {
  const obj = {};

  for (const entry of arr) {
    obj[entry] = true;
  }

  const newArr = [];
  for (const key in obj) {
    newArr.push(key);
  }

  return newArr;
}
// Similar to the above but using Array.filter()
// Performance: 0.1652799 ms
function removeDupesFromArray_3(arr) {
  const obj = {};

  return arr.filter((entry) => {
    if (obj[entry]) return false;
      
    obj[entry] = true;
    return true;
  });
}
// By using a Set of items :)
// Performance: 0.15741600 ms
function removeDupesFromArray_4(arr) {
  return [...new Set(arr)];
}

Flat an Ar­ray

const arr = [
    [ "💰", "🐟", "🐟" ],
    [ ["🐟", "💐", "💐"], ["💵", "🏆"], "🐟" ],
    "🏆", "💐", "💵"
];
// Using the Built-in Array.flat() 
// Performance: ~0.3 ms
function flatten_builtIn(arr) {
  return arr.flat(5);
}
// Slow recursive solution
// Performance: ~2.5 ms
function flatten_1(arr) {
  let outputArr = [];

  for (const entry of arr) {
    if (Array.isArray(entry)) outputArr = [...outputArr, ...entry];
    else outputArr.push(entry);
  }

  for (let i = 0; i < outputArr.length; i++) {
    if (Array.isArray(outputArr[i])) {
      outputArr.splice(i, 1, ...flatten(outputArr[i]));
    }
  }
 
  return outputArr;
}
// Little bit faster non recursive solution
// Performance: ~1.0 ms
function flatten_2(arr) {
  const newArr = [];

  arr.forEach((el) => {
    if (Array.isArray(el)) {
      el.forEach((el) => newArr.push(el));
    } else {
      newArr.push(el);
    }
  });

  return newArr;
}