很难说清楚我的问题,但是我会在这里尝试更好地解释它。
我有三个数组:
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 的每个元素,并将这些元素在 nums 上的位置压入 posiciones 。
这是我到目前为止所做的,但是我不知道为什么它不起作用:
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]
此外,我编辑了提供的数字,因为根据提供的数字和答案,我寻找了无法提供所需答案的数字。
答案 0 :(得分:1)
(已针对您的新数据集进行了更新,但请注意,您的预期结果是错误的,应该为[1,2,3,4,5,6,8,9]
,除非您的逻辑与您所说的完全不同,请参见{{3 }}。如果您希望第一个条目位于“索引” 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,map
和filter
:
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);
答案 1 :(得分:0)
如果在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);
答案 2 :(得分:0)
您可以使用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);