Javascript,使用for循环

时间:2017-09-06 12:22:42

标签: javascript arrays loops for-loop

合并此代码的最佳方法是什么?事实上,它完美地工作,但它需要长达40-50项,所以需要大幅缩短,(我假设,有一个for循环)。

对于Javascript来说,我几乎是一个新手,尝试将数组添加到带有循环的数组中让我感到非常困惑。

" vac1。"," vac2。"等等,稍后在代码中使用变量将指针添加到Google Maps地图上。

var x = count.count; // x = a value that changes (between 1 & 50)

if(x == 1){
    locations = [
        [vac1.vacancy_title, vac1.vacancy_latlng, vac1.vacancy_url, vac1.vacancy_location]
    ];
}
if(x == 2){
    locations = [
        [vac1.vacancy_title, vac1.vacancy_latlng, vac1.vacancy_url, vac1.vacancy_location],
        [vac2.vacancy_title, vac2.vacancy_latlng, vac2.vacancy_url, vac2.vacancy_location]
    ];
}
if(x == 3){
locations = [
    [vac1.vacancy_title, vac1.vacancy_latlng, vac1.vacancy_url, vac1.vacancy_location],
    [vac2.vacancy_title, vac2.vacancy_latlng, vac2.vacancy_url, vac2.vacancy_location],
    [vac3.vacancy_title, vac3.vacancy_latlng, vac3.vacancy_url, vac3.vacancy_location]
];
}

...etc etc...

我尝试使用for循环,但它不起作用,我不知道我是否能够正确地知道如何正确地进行操作。

var x = count.count;
locations = [];
array = [];

for (i = 0; i < x; i++) {
    array = [vac[i].vacancy_title, vac[i].vacancy_latlng, vac[i].vacancy_url, vac[i].vacancy_location];
    locations.push(array);
}

非常感谢任何帮助或建议!

谢谢。

5 个答案:

答案 0 :(得分:0)

您需要将它们视为字符串:

var x = 5;
locations = [];
array = [];

for (i = 1; i <= x; i++) {
    array = ['vac'+i+'.vacancy_title', 'vac'+i+'.vacancy_latlng', 'vac'+i+'.vacancy_url', 'vac'+i+'.vacancy_location'];
    locations.push(array);
}

console.log(locations);

答案 1 :(得分:0)

创建一个数组vac并使用您之前的代码:

var x = count.count;
locations = [],
array = [],
vac = [ /* vac1, vac2, ...., vacn */ ];

for (i = 0; i < x; i++) {
    array = [vac[i].vacancy_title, vac[i].vacancy_latlng, vac[i].vacancy_url, vac[i].vacancy_location];
    locations.push(array);
}

答案 2 :(得分:0)

将数组中的vac*元素分组,然后使用slice剪切尽可能多的元素,然后使用map生成结果array

var vacs = [vac1, vac2 /*, ...*/];                       // group the vacs into one single array

var x = count.count;                                     // x is the number of vacs to generate

var locations = vacs.slice(0, x).map(function(vac) {        // slice (cut out) x elements from the arrays vacs then map the cut-out array into your result array 
    return [vac.vacancy_title, vac.vacancy_latlng, vac.vacancy_url, vac.vacancy_location];
});

答案 3 :(得分:0)

您可以使用eval作为变量名称,并使用另一个数组为所需的键构建一个新数组。

基本上你应该重新组织你的程序以使用没有eval的解决方案。阵列可以提供帮助。它是为迭代而制作的。

var x = count.count,
    i,
    keys = ['vacancy_title', 'vacancy_latlng', 'vacancy_url', 'vacancy_location'],
    locations = [];
    object;

for (i = 1; i <= x; i++) {
    object = eval('vac' + i);
    locations.push(keys.map(function (k) { return object[k]; }));
}

答案 4 :(得分:0)

因为任何全局变量都是全局对象的属性:

var vac1 = "whatever";
console.lof(window.vac1); // => logs "whatever"
console.lof(window["vac1"]); // => accessed as an array, logs "whatever" too

您可以使用全局对象并将其作为数组访问以查找您的vac1,vac2,vac3变量:

var x = count.count, i;
locations = [],
array = [],
var globalObject = window; // or whatever the global object is for you
var vac; // this will be used to store your vac1, vac2, etc.

for (i = 0; i < x; i++) {
    vac = globalObject["vac"+i]; // the "vac" + i variable read from the global object 
    if (vac !== undefined) {
        array = [vac.vacancy_title, vac.vacancy_latlng, vac.vacancy_url, vac.vacancy_location];
        locations.push(array);
    }
}