如何从数组而不是索引中返回项目

时间:2019-02-07 16:13:54

标签: javascript

我正在制作一个返回数组元素并返回上一个和下一个元素的函数,但是我的问题是我的函数返回了数组元素的索引,我想返回项目

这是数组

var items = ['bill','hill','dill',4,5,6,7,8,9,10];

这是我的职责

function getItem(index, arr) {
    if(index > arr.length) {
        return -1; 
    }

    const prev = index - 1;
    const next = index + 1;
    const prevPrev = prev - 1;
    const nextNext = next + 1;

    if(index == 0) { 
        return {index, next, nextNext}
    } else if (index == arr.length - 1) { 
        return {prevPrev, prev, index}
    } else {
        return {prev, index, next};
    }
}

输出是

{prev: 1, index: 2, next: 3}

我想退回

{prev:'bill', index:'hill', next:'dill'}

6 个答案:

答案 0 :(得分:0)

您可以这样操作:

var items = ['bill', 'hill', 'dill', 4, 5, 6, 7, 8, 9, 10];

function getItem(index, arr) {
  if (index > arr.length) {
    return -1;
  }

  const prev = items[index - 1];
  const next = items[index + 1];
  const prevPrev = items[prev - 1];
  const nextNext = items[next + 1];
  const index1 = items[index]

  if (index == 0) {
    return {
      index1,
      next,
      nextNext
    }
  } else if (index == arr.length - 1) {
    return {
      prevPrev,
      prev,
      index1
    }
  } else {
    return {
      prev,
      index1,
      next
    };
  }
}

console.log(getItem(1, items));

您将返回数组中每个索引的值,而不是返回索引号本身。

答案 1 :(得分:0)

假设您输入的函数是“ index”的数字和“ arr”的数组,则返回arr [number]应该返回您需要的元素。

if(index > arr.length) {
    return -1; 
}
    const prev = index - 1;
    const next = index + 1;
    const prevPrev = prev - 1;
    const nextNext = next + 1;

    if(index == 0) { 
        return {arr[index], arr[next], arr[nextNext]}
    } else if (index == arr.length - 1) { 
        return {arr[prevPrev], arr[prev], arr[index]}
    } else {
        return {arr[prev], arr[index], arr[next]};
    }
}

尽管您应该安全地防止返回的值超出范围(例如,检查nextNext和prevPrev是否仍在数组的大小之内-例如,只有2个数组)

答案 2 :(得分:0)

如果您知道索引,则可以使用:

    if(index == 0) { 
        return {arr[index], arr[next], arr[nextNext]}

...等等,依此类推。

答案 3 :(得分:0)

您必须在函数内部进行一些小的更改 检查这些行const prev = index - 1; const next = index + 1; return {prev, index:index, next}; 只需将它们更改为 const prev = arr[index - 1]; const next = arr[index + 1]; return {prev, index:arr[index], next};会返回索引的值instd

var items = ['bill','hill','dill',4,5,6,7,8,9,10];

function getItem(index, arr) {
    if(index > arr.length) {
        return -1; 
    }

    const prev = arr[index - 1];
    const next = arr[index + 1];
    const prevPrev = prev - 1;
    const nextNext = next + 1;

    if(index == 0) { 
        return {index, next, nextNext}
    } else if (index == arr.length - 1) { 
        return {prevPrev, prev, index}
    } else {
        return {prev, index:arr[index], next};
    }
}
console.log(getItem(1, items))

答案 4 :(得分:0)

您可以使用地图来实现相同的目标。

var items = ['bill', 'hill', 'dill', 4, 5, 6, 7, 8, 9, 10];

var arr = items.map((item, index, array) => {
  return {
    prev: item,
    index: array[index + 1],
    next: array[index + 2]
  }
});

console.log(arr)

答案 5 :(得分:0)

这是我如何使用内部safeGet函数在索引超出范围时返回未定义的方法:

const items = ['bill', 'hill', 'dill', 4, 5, 6, 7, 8, 9, 10];

const getItem = (arr, i) => {
  const safeGet = i => i >= 0 && i < arr.length ? arr[i] : undefined;
  return { prev: safeGet(i-1), index: safeGet(i), next: safeGet(i+1) };
};

console.log(getItem(items, 0));
console.log(getItem(items, 2));
console.log(getItem(items, 9));
console.log(getItem(items, 20));