Check if an Array of Arrays contains a value in node js

In C#, I could check if any of the nested List collection has a value. Example of such structure Check a List[]> contains a value using Linq

List<int> a= new List<int>(){ 2, 2, 3, 4, 5}; List<int> b= new List<int>() { 2, 2, 2, 6 }; List<List<int>[]> c = new List<List<int>[]>(); c.Add(new[]{a,b}); 

// checking if the value is in any of the collections. for example, this will result to 2
var result = c.SelectMany(x => x).SelectMany(x => x).Any(p => p == 2);

but since I'm exploring the LINQ capabilities in node js , I decided to extend this to an Array of Arrays

var data= [[2, 2, 3, 4, 5],[2, 2, 2, 6], [9], [13, 1,1,90]]; var LINQ = require('node-linq').LINQ; var resultI=new LINQ(data).Any(function(row) {  return  checkElement(row); });  console.log(resultI);  function checkElement(array)     {              for(var i = 0 ; i< array.length; i++)         {                    if(array[i]== 19){              return true;          }      }  } 

Note: I installed the LINQ module using
npm install https://github.com/wearefractal/node-linq/tarball/master

Can this be improved? please any suggestions will be quite appreciated.

Replay

Style

  • Your braces are not styled consistently, and most JavaScript developers find sameline braces more idiomatic.
  • I think it is better form to place your requires all the way on the top

Approach

  • You basically rewrote Array.indexOf , except that indexOf gives more info (where is the element), so I would rewrite this with indexOf.
  • Searching for value 19 makes your hasElement function very limited, it would be a more flexible function if you pass the row and the search value.

All in all, I would counter-propose something like this:

var LINQ = require('node-linq').LINQ;

var data= [[2, 2, 3, 4, 5],[2, 2, 2, 6], [9], [13, 1,1,90]];

var resultI=new LINQ(data).Any(function(row){
 return hasElement(row, 19);
});
console.log(resultI);

function hasElement(array, value){
  return array.indexOf( value ) != -1;
}

The next level?

The flow of LINQ gets a bit broken with the inline function, it would be even cooler if you would call a function there that returns a function seeking for the right value:

var LINQ = require('node-linq').LINQ;

var data= [[2, 2, 3, 4, 5],[2, 2, 2, 6], [9], [13, 1,1,90]];

var resultI=new LINQ(data).Any( seekValue(19) );
console.log(resultI);

function seekValue( value) {
  return function boundSeekValue( row ){
    return row.indexOf( value ) != -1;
  };
}

Category: beginner Time: 2016-07-30 Views: 0

Related post

iOS development

Android development

Python development

JAVA development

Development language

PHP development

Ruby development

search

Front-end development

Database

development tools

Open Platform

Javascript development

.NET development

cloud computing

server

Copyright (C) avrocks.com, All Rights Reserved.

processed in 0.248 (s). 12 q(s)