user8758206
user8758206

Reputation: 2191

Selecting specific elements from an array

I’m trying to solve a tricky problem here. Whenever there are 3 rows together (e.g. 3A, 3B & 3C), I want to increment the variable ‘count’. My logic only works for the first row but then fails for the rest. The answer to this problem should be 3. Can someone shed some light here?

function doThis() {
    var everySeat = [1A, 1B, 1C, 2A, 2C, 3A, 3B, 3C, 151A, 151B, 151C, 152B, 152C];
    var count;

    for (i = 1; i <= everySeat.length; i++) {
        if (everySeat[i-1] = i + ‘A’ && everySeat[i] = i + ‘B’ && everySeat[i+1] = i + ‘C’) {
            count++;
        }
    }

}

doThis();

Upvotes: 0

Views: 66

Answers (5)

guest
guest

Reputation: 704

Try this. Works fine.

function doThis() {
    var everySeat = ['1A', '1B', '1C', '2A', '2C', '3A', '3B', '3C', '151A', '151B', '151C', '152B', '152C'];
    var count = 0;

    for (var i = 1; i <= everySeat.length-2; i++) {
        var prefix = parseInt(everySeat[i-1]);
        if (everySeat[i-1] == prefix + 'A' && everySeat[i] == prefix + 'B' && everySeat[i+1] == prefix + 'C') {
            count++;
        }
    }
return count;
}

Upvotes: 1

Nina Scholz
Nina Scholz

Reputation: 386883

You could take a hash table for counting rows and add one if count is three for a row.

This proposal works for unsorted data as well.

var array = ['1A', '1B', '1C', '2A', '2C', '3A', '3B', '3C', '151A', '151B', '151C', '152B', '152C'],
    count = Object.create(null),
    result = array.reduce(function (r, s) {
        var key = s.match(/\d+/)[0];
        count[key] = (count[key] || 0) + 1;
        return r + (count[key] === 3);
    }, 0);

console.log(result);

Upvotes: 0

Salman
Salman

Reputation: 333

Firstly you array has syntax error. SO try below code.

var everySeat = ['1A', '1B', '1C', '2A', '2C', '3A', '3B', '3C', '151A', '151B', '151C', '152B', '152C'];
    var count =0;
    for(var i =0; i < everySeat.length ; i++ ){
    if(everySeat[i] == i + 'A' && everySeat[i+1] == i + 'B' && everySeat[i+2] == i + 'C'  ){
    count++;
    }
    }
    console.log(count);

Upvotes: 0

Nidhi Agarwal
Nidhi Agarwal

Reputation: 326

You can convert it in string then match required substring occurrence.

var everySeat = ['1A', '1B', '1C', '2A', '2C', '3A', '3B', '3C', '151A', '151B', '151C', '152B', '152C'];
var str = everySeat.toString();
var count1 = (str.match(/3A,3B,3C/g) || []).length;
console.log(count1);

Upvotes: 0

RomanPerekhrest
RomanPerekhrest

Reputation: 92904

Extended solution with Array.slice() and String.match() functions:

var everySeat = ['1A', '1B', '1C', '2A', '2C', '3A', '3B', '3C', '151A', '151B', '151C', '152B', '152C'],
    count = 0;
	
for (var i=0, l=everySeat.length; i < l-2; i++) {
    if (String(everySeat.slice(i,i+3)).match(/\d+A,\d+B,\d+C/)) {
        count++;
        i +=2;
    }	
}

console.log(count);

Upvotes: 0

Related Questions