Как получить противоположный индекс и значение элемента Array? - PullRequest
0 голосов
/ 16 марта 2019

У меня есть массив, который я создал с использованием Array(...) и Array.prototype.map, например:

var array_name = Array(255).map(function(undef, i) {
  return i + 1;
});

Значения этого массива:

[1, 2, 3, ..., 253, 254, 255]

Этомассив, который не будет изменен, поэтому первое значение этого массива всегда будет 1, а последнее значение этого массива всегда будет 255.

Я уже знаю, что индекс каждого значения{value} - 1, поэтому 200 будет 199, 199 будет 198, и т. Д.

Скажем, я хочу получить 255 противоположное значение, которое будет0, я мог бы получить это, используя array_name[0], но что, если бы я хотел получить противоположное значение 200, как бы я узнал, что такое противоположный индекс 199, чтобы я мог получить его значение?

Ответы [ 6 ]

1 голос
/ 16 марта 2019

Вычтите index из (length-1) -> max inde x массива

let arr = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];

function findOpp(index, length) {
  maxIndex = length - 1;
  if (index <= maxIndex && index >= 0) {
    return maxIndex - index;
  } else {
    
    return 'You have enter a wrong index';
  }
}

console.log(findOpp(-1, 10));
console.log(findOpp(0, 10));
console.log(findOpp(1, 10));
console.log(findOpp(2, 10));
console.log(findOpp(4, 10));
console.log(findOpp(5, 10));
console.log(findOpp(6, 10));
console.log(findOpp(7, 10));
console.log(findOpp(8, 10));
console.log(findOpp(9, 10));
console.log(findOpp(10, 10));
1 голос
/ 16 марта 2019

Прежде всего, указанный вами код не создает массив [1,2,3...255]. Он создаст 255 пустых предметов, сначала вам нужно fill().

var arr = Array(255).fill().map((a,i) => i+1);


//Create an array which will have revese items.
let revarr= arr.reverse()
console.log(revarr[0]) //255
console.log(revarr[254]) // 1

Если вы не хотите создавать обратный обр. Вы можете создать function

var arr = Array(255).fill().map((a,i) => i+1);
const opp = (arr,num) => arr[arr.length - num - 1];
console.log(opp(arr,0));
console.log(opp(arr,254));
1 голос
/ 16 марта 2019

Ваш Array(255).map() создает неопределенное значение массива. Сделайте это с Array#from длина объекта. И передайте свой value.get индекс значения и сопоставьте с обратным массивом, вы получите противоположное значение

let check = (val) => {
var array_name = Array.from({length:255},(a,b)=>b+1);
var nor_ind = array_name.indexOf(val);
var re_in = array_name.reverse(array_name).indexOf(val)
return ({nor_val:val,nor_ind:nor_ind,opp_val:re_in})
}

console.log(check(254))
1 голос
/ 16 марта 2019

Во-первых, вы должны понимать, что есть странное поведение относительно Array(n).map(f) (он не создаст ожидаемый массив), см. Этот ответ для объяснения , во-вторых, сделайте это, чтобы получитьпротивоположные значения:

/* fill it first with .fill(), see the question I linked for more explanation */
var array = Array(255).fill(undefined).map(function(undef, i) {
  return i + 1;
});

function opposite(array, n) {
  return array[array.length - n];
}

console.log(opposite(array, 255));
console.log(opposite(array, 200));
console.log(opposite(array, 199));
console.log(opposite(array, 1));

Обратите внимание, что вместо length - n - 1 используется length - n, поскольку мы имеем дело со значениями от 1 до n, а не от 0 доn - 1.

1 голос
/ 16 марта 2019

Do:

opposite_index = arr.length - index - 1

Например:

a = [1,2,3,4,5,6,7,8,9,10]

index = 3
a[index]
4

Это противоположно 7 так:

opposite_index = a.length - index - 1
a[opposite_index]
7

С reverse согласно @Maheer Aliпредложение:

a.reverse()[index]
7
0 голосов
/ 16 марта 2019

Используя Maheer Ali , мне удалось получить желаемый результат путем обращения массива и использования indexOf для получения индекса этого числа:

var numbers = Array(255).map(function(v, i) {
  return i + 1;
});

var opposite_brightness = numbers.reverse()[numbers.indexOf(brightness)];
...