通过值在多维数组中进行Javascript搜索?

3
我有一个像这样的多维数组:
(2) ["Vårt solsystem är 4,5 miljarder år gammalt.", "vart-solsystem-ar-45-miljarder-ar-gammalt"]
0: "Vårt solsystem är 4,5 miljarder år gammalt."
1: "vart-solsystem-ar-45-miljarder-ar-gammalt"

如果我知道[1],我想要得到[0]的值。

我知道如果我知道第一个数组的索引,就可以像这样获取[0]的值。

var theLine = newlines[2];
console.log(theLine[0]); //Vårt solsystem är 4,5 miljarder år gammalt.

如果我知道"vart-solsystem-ar-45-miljarder-ar-gammalt",如何得到"Vårt solsystem är 4,5 miljarder år gammalt."?

第一维大约有500个记录,第二维始终有两个记录。

2个回答

1
如果我理解正确,您想从第一个嵌套数组中提取“display”值,其中该嵌套的第二个项与您正在搜索的值匹配。
有许多实现方式 - 对于大约500条记录,基于filter()map()的以下方法应该是适用的:

const data = [
  ["Vårt solsystem är 4,5 miljarder år gammalt.", "vart-solsystem-ar-45-miljarder-ar-gammalt"],
  ["Foo bar", "foo-bar"],
  ["Cat video", "cat-video"]
];

function findByValue(value) {

  /* Extract first value of result to variable "result" (if any found) */
  const [result] = data
  /* Isolate sub arrays where second entry matches search value */
  .filter(item => item[1] === value) 
  /* Map first entry of filtered array sub array items */
  .map(item => item[0])

  return result;
}

console.log(findByValue("vart-solsystem-ar-45-miljarder-ar-gammalt"), "===", "Vårt solsystem är 4,5 miljarder år gammalt.");
console.log(findByValue("foo-bar"), "===", "Foo bar");
console.log(findByValue("cat-video"), "===", "Cat video");
console.log(findByValue("no-entry"), "===", undefined);


0
假设您正在处理唯一值并且仅寻找单个返回值,您可以使用Array#find()Array#some()的组合,或者Array#includes(),或者只需检查第二个元素的值相等性。

const data = [
  [1, 2],
  [3, 4],
  [5, 6]
];

const known = 4;
console.log(data.find(arr => arr.some(val => val === known))[0])// expect 3


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接