将数组值链接到其他数组,并在Javascript中推送到新数组
我试图循环遍历一个整数数组,并将每个值排序为“链接/映射”到另一个数组中存储的图像URL(然后将新数据推送到一个新数组中) 我尝试过的是使用带有indexOf方法的For循环,但实际上似乎不起作用 另外,需要注意的是,我的将数组值链接到其他数组,并在Javascript中推送到新数组,javascript,arrays,Javascript,Arrays,我试图循环遍历一个整数数组,并将每个值排序为“链接/映射”到另一个数组中存储的图像URL(然后将新数据推送到一个新数组中) 我尝试过的是使用带有indexOf方法的For循环,但实际上似乎不起作用 另外,需要注意的是,我的arrayOfInteger中没有一个数据出现,我需要将每个值链接到它的等效图像 以下是我的代码片段: var images = []; var arrayOfInteger = [1, 16, 10, 8, 13, 9, 19, 12, 5, 18, 9, 1, 17, 7
arrayOfInteger
中没有一个数据出现,我需要将每个值链接到它的等效图像
以下是我的代码片段:
var images = [];
var arrayOfInteger = [1, 16, 10, 8, 13, 9, 19, 12, 5, 18, 9, 1, 17, 7, 18, 16, 9, 5, 19, 10, 0, 13, 3, 2, 12];
var imgData = [
[0, 'img/0.svg'],
[1, 'img/1.svg'],
[2, 'img/2.svg'],
[3, 'img/3.svg'],
[4, 'img/4.svg'],
[5, 'img/5.svg'],
[6, 'img/6.svg'],
[7, 'img/7.svg'],
[8, 'img/8.svg'],
[10, 'img/10.svg'],
[11, 'img/11.svg'],
[12, 'img/12.svg'],
[13, 'img/13.svg'],
[15, 'img/15.svg'],
[16, 'img/16.svg'],
[17, 'img/17.svg'],
[18, 'img/18.svg'],
[19, 'img/19.svg'],
]
function pushImages() {
for(var i=0;i<arrayOfInteger.length;i++){
if(imgData.indexOf(grades[i])!= -1){images.push(imgData[i][1]);}
}
}
因为我想根据arrayOfInteger
给我的信息在界面中显示图像。此阵列经常从服务器更新
var images = [];
var arrayOfInteger = [1, 16, 10, 8, 13, 9, 19, 12, 5, 18, 9, 1, 17, 7, 18, 16, 9, 5, 19, 10, 0, 13, 3, 2, 12];
var imgData = {
0 : 'img/0.svg',
1 : 'img/1.svg',
2 : 'img/2.svg',
3 : 'img/3.svg',
4 : 'img/4.svg',
5 : 'img/5.svg',
6 : 'img/6.svg',
7 : 'img/7.svg',
8 : 'img/8.svg',
10 : 'img/10.svg',
11 : 'img/11.svg',
12 : 'img/12.svg',
13 : 'img/13.svg',
15 : 'img/15.svg',
16 : 'img/16.svg',
17 : 'img/17.svg',
18 : 'img/18.svg',
19 : 'img/19.svg'
};
function pushImages () {
arrayOfInteger.forEach(function (v, i) {
if (typeof imgData[v] === 'object') images.push(imgData[v]);
});
}
你在找这样的东西吗???带下划线:
var images = [];
var arrayOfInteger = [1, 16, 10, 8, 13, 9, 19, 12, 5, 18, 9, 1, 17, 7, 18, 16, 9, 5, 19, 10, 0, 13, 3, 2, 12];
var imgData = [
[0, 'img/0.svg'],
[1, 'img/1.svg'],
[2, 'img/2.svg'],
[3, 'img/3.svg'],
[4, 'img/4.svg'],
[5, 'img/5.svg'],
[6, 'img/6.svg'],
[7, 'img/7.svg'],
[8, 'img/8.svg'],
[10, 'img/10.svg'],
[11, 'img/11.svg'],
[12, 'img/12.svg'],
[13, 'img/13.svg'],
[15, 'img/15.svg'],
[16, 'img/16.svg'],
[17, 'img/17.svg'],
[18, 'img/18.svg'],
[19, 'img/19.svg'],
]
_.each(imgData, function(t){
var o = _.indexOf(arrayOfInteger, t[0]);
if (o != -1) {
images.push(t[1]);
}
});
您的整个示例可以显著减少:
for(var i=0; i < arrayOfInteger.length; i++){
var imgData = 'img/' + arrayOfInteger[i] + '.svg'
}
for(变量i=0;i
请注意,这里唯一的数组是
arrayOfInteger
。imgData
数组完全没有必要。当你看到这样的重复时,你应该一直寻找减少打字或复制/粘贴工作量的方法。这里唯一适用于你的数据的答案——只需很少的修改
function pushImages() {
// Clear images if preferred
images = [];
for (var i = 0; i < arrayOfInteger.length; i++){
var data = imgData.find(function (data) {
return data[0] == arrayOfInteger[i]
});
if (data) { images.push(data[1]); }
}
}
函数pushImages(){
//如果愿意,请清除图像
图像=[];
对于(var i=0;i什么是等级
?为什么不使用对象数组而不是数组数组呢?变量“grades”指的是什么?首先单击编辑器中的
,添加JS并使其运行。例如,您的代码中没有任何等级
,您在这里试图完成什么?这似乎有很多代码可以轻松压缩到不到5行。例如,如果您有一个索引i
,那么文件名就是img='img/'+i+'.svg'
。现在,您的整个数组可以在一行代码中计算,而不是用20行代码键入。请添加所需结果的示例。为什么要使用对象?只需创建一个带有文件名的数组。@Code学徒,看起来不错。忘了那件事。。谢谢您的提醒。您甚至可以更进一步,完全摆脱数组,因为您可以仅从索引计算循环中的路径。@Code学徒我怀疑路径字符串是否为实际值。人们在这里匿名代码是很常见的。我将给定的数据解释为真实数据的代表,因为数据中有一种模式,即使这些不是最终代码中的确切字符串。除了延迟命中之外,我们在这里使用下划线还有什么好处?你能进一步解释这是如何解决OP的问题的吗?嗯,关于下划线库,只是为了避免使用“for”结构。如果他在寻找存在的图像,那么我认为最好拍下来。因此,只能存在5个图像和20个项目的数组,它只会运行2次。如果图像名称变得不同怎么办??类似于“1.svg”的第二个数据?我认为这种方法也适用于我。我要试试这个。它可以工作,但我现在遇到的问题是,我的图像
数组似乎无限期地填充(因为源数组arrayOfInteger
大约每2秒更新一次它的值)。我的源数组由25个元素组成,我认为我的图像数组仍然是25个元素。就像每次调用pushImages
时,都会将数据附加到现有数组中。如果我不想超过25个元素,那该怎么办?我的意思是,如果ArrayFinteger
值更改并且pushImages()
多次运行,则替换图像中的新数据。
function pushImages() {
// Clear images if preferred
images = [];
for (var i = 0; i < arrayOfInteger.length; i++){
var data = imgData.find(function (data) {
return data[0] == arrayOfInteger[i]
});
if (data) { images.push(data[1]); }
}
}