Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将数组值链接到其他数组,并在Javascript中推送到新数组_Javascript_Arrays - Fatal编程技术网

将数组值链接到其他数组,并在Javascript中推送到新数组

将数组值链接到其他数组,并在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

我试图循环遍历一个整数数组,并将每个值排序为“链接/映射”到另一个数组中存储的图像URL(然后将新数据推送到一个新数组中)

我尝试过的是使用带有indexOf方法的For循环,但实际上似乎不起作用

另外,需要注意的是,我的
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]); }
    }
}