如何在不知道确切字符串的情况下获取数组中的特定元素

时间:2019-04-03 14:48:21

标签: javascript jquery arrays

TLDR; 有什么方法可以只知道元素的开头或包含什么来使用$.inArray

我有一个元素数组,我希望能够选择一个以某个字符串开头的元素,因为该值是动态的。

例如:

我的数组是:

array = ["Alpha_GB8732", "Beta_GB29834", "Gamma_GB2384", "Delta_GB23984"]

但是对于每个用户,顺序和确切名称可能会更改。

使用jQuery,如果我知道确切的值,则可以执行以下操作来获取元素。

var order = $.inArray("Alpha_GB8732", array)
$item = $(array).get(order)

但是,由于GB加载后页面上每个元素的所有内容都发生了变化,因此我无法使用它,因为我不知道确切的字符串。

是否只有知道元素以什么开头或包含什么,才能使用$.inArray

答案

非常感谢您所有的帮助人员!我真的很感激。

最后,对我来说最好的答案是路易斯的回应:

let array = ["Alpha_GB8732", "Beta_GB29834", "Gamma_GB2384", "Delta_GB23984"]
let result = array.filter((el) => el.includes("Alpha_GB") === true);
console.log(result);

起初这对我不起作用...因为gulp-uglify由于某种原因无法编译 es6 脚本。因此,对于在编译时可能遇到相同问题的任何人,这都是一样的东西,但在 es5 中:

array = ["Alpha_GB8732", "Beta_GB29834", "Gamma_GB2384", "Delta_GB23984"]
var result = array.filter(function (el) {
    return el.includes("Alpha_GB") === true;
});
console.log(result);

再次感谢大家的帮助! (@ Louis,@ ControlAltDel)

3 个答案:

答案 0 :(得分:1)

您可以使用过滤器,例如

array = ["Alpha_GB8732", "Beta_GB29834", "Gamma_GB2384", "Delta_GB23984"]
var find = array.filter(function(item) {
  return (this === "Alpha_GB8732");
});
find = (find.length > 0) ? find[0] : null;

答案 1 :(得分:1)

基于ControlAltDel的注释,可以使用Array.filter()。请参见下面的示例;

let array = ["Alpha_GB8732", "Beta_GB29834", "Gamma_GB2384", "Delta_GB23984"]
let result = array.filter((el) => el.includes("Alpha_GB") === true);
console.log(result);

// You could turn this in to a function
function arrayContains(arr, str){
  return arr.filter((el) => el.includes("Alpha_GB") === true).length > 0;
}

console.log(arrayContains(array, 'Alpha_GB')); // returns true

// And use it like this
//if(arrayContains(array, 'Alpha_GB')){}...

答案 2 :(得分:1)

因此您需要根据数组中的某些字符过滤掉数组,这是它的工作方式:

const MyArray = ["Alpha_GB8732", "Beta_GB29834", "Gamma_GB2384", "Delta_GB23984"]

//you can replace .startswith() with any function that you might need. you can also apply .toLowerCase() to filter case-insensitive items

const filteredArray = MyArray.filter((x) => x.startsWith("N"));

console.log(filteredArray);

希望有帮助!