如何在javascript中找到数组的中间元素?

时间:2018-05-19 12:30:13

标签: javascript

我在访谈中有问题,如何在javascript 中找到数组的中间元素而不使用长度方法和循环。从我的观点来看,我们可以找到middle元素但没有循环,我们无法找到。

我尝试了但是我没有得到正确的答案。我得到了4,但预计是3

var arr =[1,2,3,4,5];

function middleElement(arr){

var i=0,
 j=i+2;
 while(arr[j] !=null){
     i++;
     j=i+2;
 }

return arr[i]
}

middleElement(arr);

6 个答案:

答案 0 :(得分:2)

如果数组值唯一,则可以反转数组。并将其与原始阵列进行比较。匹配的地方是中心。

var arr = [1, 2, 3, 4, 5];

var middle = [...arr].reverse().reduce((c, v, i) => {
  if (v === arr[i]) c = v;
  return c;
}, null);

console.log(middle);

如果你也不允许减少,你可以做递归

let arr = [1, 2, 3, 4, 5];

let findMiddle = (a, b, i) => {
  if (a[i] !== b[i]) return findMiddle(a, b, i + 1);
  return a[i];
}

let middle = findMiddle(arr, [...arr].reverse(), 0);

console.log(middle);

答案 1 :(得分:2)

你可以使用递归来实现:

var array = [1,2,8,4,5];

function middle(i) {
    if (array[i] !== undefined) {
       return middle(i+1);
    } else {
       return array[Math.floor(i / 2)];
   }
}

console.log(middle(0));

答案 2 :(得分:2)

您可以通过弹出和移动数组来使用递归方法。然后获取最后一个值,该值不等于undefined



function getLeft(array, last) {
    var value = array.shift();
    return value === undefined ? last : getRight(array, value);
}

function getRight(array, last) {
    var value = array.pop();
    return value === undefined ? last : getLeft(array, value);
}

function getMiddle(array) {
    return getRight(array.slice()); // take copy for destroying.
}

console.log(getMiddle([1, 2, 3, 4, 5]));




使用触发器进行弹出/移位方法的简洁方法。



function getMiddle(array) {

    function takeItem(i) {
        var value = a[['pop', 'shift'][i]](); 
        return 0 in a
            ? takeItem(1 - i)
            : value;
    }

    var a = array.slice(); // take copy for destroying
    return takeItem(0);
}

console.log(getMiddle([1, 2, 3, 4, 5]));




答案 3 :(得分:0)

.length为偶数时,以及.length高于元素数的某些情况下,找不到中间元素是不可能的。例如,.length的{​​{1}}为5,中间元素为1,但如果没有[,,1,,,]属性,则无法确定。 话虽如此,这是一个接受答案的小改进版本:

.length

答案 4 :(得分:0)

var count =0;
function func(arr){
    if(arr[count] != undefined) {
        count++;
        func();
    }
}
func();
console.log(arr[count/2]);

答案 5 :(得分:0)

对此的快速解决方案是 middle = arr[parseInt((arr.length-1)/2)] 这将给出最接近的整数的中间数