我的数据可以用这三个数组进行简单解释(尽管规模要大得多):
var arrayOfVariables = ['var1', 'var2', 'var3', 'var4'];
var arrayWithValues = [20, 10, 30, 40];
var arrayToFilter = ['var1', 'var3'];
理想情况下,我想过滤arrayToFilter并查看它是否包含来自arrayOfVariables的任何变量。如果他们这样做,我想使用他们的索引从arrayWithValues中获取一组正确的值。这意味着var1 = 20,var2 = 10,var3 = 30,var4 = 40.因为arrayToFilter包含var1 och var 3,我的最后一个数组将是:
var output = [20, 30];
有没有人知道这是否有效,最好不要使用for-loops或类似方法。也许filter / map / reduce?
*更新*
var arrayOfVariables = ['var3', 'var2', 'var1', 'var4'];
var arrayWithValues = [30, 10, 20, 40];
var arrayToFilter = ['var1', 'var3'];
如果我要将数组的顺序更改为上面,我仍然希望输出[20,30]。这意味着我希望在arrayToFilter之后排序的值:首先是var1(20)然后是var3(30)。
答案 0 :(得分:4)
您可以通过获取索引来过滤值,并查看值是否在过滤器数组中。
var variables = ['var1', 'var2', 'var3', 'var4'],
values = [20, 10, 30, 40],
filter = ['var1', 'var3', 'foo'],
result = values.filter((_, i) => filter.includes(variables[i]));
console.log(result);

带Array#map
的版本。它仅适用于variables
中的现有值。
var variables = ['var1', 'var2', 'var3', 'var4'],
values = [20, 10, 30, 40],
filter = ['var1', 'var3', 'foo'],
result = filter.map(f => values[variables.indexOf(f)]);
console.log(result);

使用Map
的 4castle 方法。
var variables = ['var1', 'var2', 'var3', 'var4'],
values = [20, 10, 30, 40],
filter = ['var1', 'var3'],
map = new Map(variables.map((v, i) => [v, values[i]]))
result = filter.map(f => map.get(f));
console.log(result);

答案 1 :(得分:3)
您可以使用reduce()
方法执行此操作,并检查当前元素是否存在于您可以使用indexOf()
的其他数组中,这也将为您提供该元素的索引。
var arrayOfVariables = ['var1', 'var2', 'var3', 'var4'];
var arrayWithValues = [20, 10, 30, 40];
var arrayToFilter = ['var1', 'var3'];
const result = arrayToFilter.reduce(function(r, e) {
let i = arrayOfVariables.indexOf(e);
if (i != -1) r.push(arrayWithValues[i])
return r;
}, [])
console.log(result)
答案 2 :(得分:2)
您可以使用array.map
和array.indexOf
var arrayOfVariables = ['var1', 'var2', 'var3', 'var4'];
var arrayWithValues = [20, 10, 30, 40];
var arrayToFilter = ['var1', 'var3'];
// map will return a new array
var m = arrayToFilter.map(function(item) {
// for every element check if that element is present in arrayOfVariables
if (arrayOfVariables.indexOf(item) != -1) {
// if present get the index and get the value from arrayWithValues
return arrayWithValues[arrayOfVariables.indexOf(item)]
}
return x
})
console.log(m)