繁体   English   中英

如何使用另一个元素保存数组中元素的位置?

[英]How can I save the positions of elements on an array using the elements of another?

我的问题要比现在更清楚是有点困难的,但是我会在这里尝试更好地解释它。

我有三个数组:

var nums = [431, 324, 4344, 4324, 4344, 4324, 4444, 3441, 3214, 4344]
var nums4 = [324, 4344, 4324, 4344, 4324, 4444, 3214, 4344]
var posiciones = [];

我希望使用nums4上的每个元素检查nums的每个元素,并在posiciones推送这些元素在nums上的位置

这是我到目前为止所做的,但是我不知道为什么它不起作用:

var nums = [431, 324, 4344, 4324, 4344, 4324, 4444, 3441, 3214, 4344]
var nums4 = [324, 4344, 4324, 4344, 4324, 4444, 3214, 4344]
var posiciones = [];
    var pos = nums.indexOf(nums4[0])

    for (var io = 0; pos != -1 ;)
    /*while (pos != -1)*/
    {
        posiciones.push(pos);
        if(nums4.indexOf(nums4[io], pos + 1) == -1)
        {
        io++;
        }
        pos = nums.indexOf(nums4[io],pos + 1);
    }

    for(var i = 0; i < posiciones.length; i++)
    {
        posiciones[i]++;
    }

我不知道我是否清楚这个问题,因为英语不是我的母语,但是如果您能向我解释该怎么做,我将不胜感激。

编辑:答案应该是:

var posiciones = [2, 3, 4, 5, 6, 7, 9, 10]

但是代替它的是,代码提供的答案是:

var posiciones = [2, 3, 5, 10]

另外,我编辑了提供的数字,因为根据提供的数字和答案,我寻找了无法提供所需答案的数字。

(已针对您的新数据集进行了更新,但请注意,您的预期结果是错误的,除非您的逻辑与您的逻辑有很大不同,否则应为[1,2,3,4,5,6,8,9]说,请参阅此注释 。如果希望第一个条目位于“索引” 1​​而不是索引0,则在下面的示例中保存索引时只需使用+ 1

我希望使用nums4上的每个元素检查nums的每个元素,并在posiciones上推送这些元素在nums上的位置。

对于这么小的数据集,对于nums4检查,我可能只使用includes (对于更大的数据集,我会制作一个Map或类似的东西,以避免不断地重新扫描。)

对于主循环,也许forEach

 var nums = [431, 324, 4344, 4324, 4344, 4324, 4444, 3441, 3214, 4344] var nums4 = [324, 4344, 4324, 4344, 4324, 4444, 3214, 4344] var posiciones = []; nums.forEach((value, index) => { if (nums4.includes(value)) { posiciones.push(index); } }); console.log(posiciones); 

或以“索引” 1​​而不是0开头:

 var nums = [431, 324, 4344, 4324, 4344, 4324, 4444, 3441, 3214, 4344] var nums4 = [324, 4344, 4324, 4344, 4324, 4444, 3214, 4344] var posiciones = []; nums.forEach((value, index) => { if (nums4.includes(value)) { posiciones.push(index + 1); // + 1 to make it 1-based } }); console.log(posiciones); 


或者只是一个简单的for循环:

 var nums = [431, 324, 4344, 4324, 4344, 4324, 4444, 3441, 3214, 4344] var nums4 = [324, 4344, 4324, 4344, 4324, 4444, 3214, 4344] var posiciones = []; for (let index = 0; index < nums.length; ++index) { if (nums4.includes(nums[index])) { posiciones.push(index); } } console.log(posiciones); 

或以“索引” 1​​而不是0开头:

 var nums = [431, 324, 4344, 4324, 4344, 4324, 4444, 3441, 3214, 4344] var nums4 = [324, 4344, 4324, 4344, 4324, 4444, 3214, 4344] var posiciones = []; for (let index = 0; index < nums.length; ++index) { if (nums4.includes(nums[index])) { posiciones.push(index + 1); // + 1 to make it 1-based } } console.log(posiciones); 


或者,如果您想使用所有FP,请mapfilter

 var nums = [431, 324, 4344, 4324, 4344, 4324, 4444, 3441, 3214, 4344] var nums4 = [324, 4344, 4324, 4344, 4324, 4444, 3214, 4344] var posiciones = nums.map((value, index) => nums4.includes(value) ? index : null).filter(v => v !== null); console.log(posiciones); 

或以“索引” 1​​而不是0开头:

 var nums = [431, 324, 4344, 4324, 4344, 4324, 4444, 3441, 3214, 4344] var nums4 = [324, 4344, 4324, 4344, 4324, 4444, 3214, 4344] var posiciones = nums.map((value, index) => nums4.includes(value) ? index + 1 : null).filter(v => v !== null); // + 1 to make it 1-based -----------------------------------------------^^^^ console.log(posiciones); 

如果在nums中找不到nums4元素,则将得到-1。

 var nums = [10, 3, 45, 44, 34, 4, 23, 44, 23, 254] var nums4 = [44, 34, 4, 44, 254] var posiciones = nums4.map(n => nums.indexOf(n)); console.log(posiciones); 

您可以使用Map映射移位的索引。

 var nums = [431, 324, 4344, 4324, 4344, 4324, 4444, 3441, 3214, 4344], nums4 = [324, 4344, 4324, 4344, 4324, 4444, 3214, 4344], pos = nums.reduce((m, v, i) => m.set(v, [...(m.get(v) || []), i + 1]), new Map); posiciones = nums4.map(v => pos.get(v).shift()); console.log(...posiciones); 

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM