Конвертировать массив JavaScript в строку - PullRequest
106 голосов
/ 13 марта 2011

Я пытаюсь перебрать список «значений» и преобразовать его в строку. Вот код:

var blkstr = $.each(value, function(idx2,val2) {                    
     var str = idx2 + ":" + val2;
     alert(str);
     return str;
}).get().join(", ");    

Функция alert () работает нормально и отображает правильное значение. Но так или иначе, функция .get () jquery не получает правильный вид объекта и завершается ошибкой. Что я делаю не так?

Ответы [ 14 ]

124 голосов
/ 13 марта 2011

Если value является ассоциативным массивом, такой код будет работать нормально:

var value = { "aaa": "111", "bbb": "222", "ccc": "333" };
var blkstr = [];
$.each(value, function(idx2,val2) {                    
  var str = idx2 + ":" + val2;
  blkstr.push(str);
});
console.log(blkstr.join(", "));
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js"></script>

(вывод появится в консоли разработчика)

Как упоминал Феликс, each() - это просто итерация массива, ничего более.

112 голосов
/ 21 июля 2011

Преобразование из массива в строку так просто!

var A = ['Sunday','Monday','Tuesday','Wednesday','Thursday']
array = A + ""

Вот и сейчас A - это строка.:)

99 голосов
/ 10 октября 2012

Вы можете использовать .toString(), чтобы объединить массив с запятой.

var array = ['a', 'b', 'c'];
array.toString(); // result: a,b,c

Или установить разделитель с помощью array.join('; '); // result: a; b; c.

47 голосов
/ 29 марта 2013

не уверен, что это то, что вы хотели, но

var arr = [A, B, C];
var arrString = arr.join(", ");

Это приводит к следующему выводу:

A, B, C

33 голосов
/ 04 марта 2016

Четыре метода для преобразования массива в строку.

Приведение к строке

var arr = ['a', 'b', 'c'] + [];  // "a,b,c"

var arr = ['a', 'b', 'c'] + '';  // "a,b,c"

Вызов .toString()

var arr = ['a', 'b', 'c'].toString();  // "a,b,c"

Явное соединение, используя .join()

var arr = ['a', 'b', 'c'].join();  // "a,b,c" (Defaults to ',' seperator)

var arr = ['a', 'b', 'c'].join(',');  // "a,b,c"

Вы можете использовать другие разделители, например, ', '

var arr = ['a', 'b', 'c'].join(', ');  // "a, b, c"

Используя JSON.stringify()

Это чище, так как заключает в кавычки строки внутри массива и правильно обрабатывает вложенные массивы.

var arr = JSON.stringify(['a', 'b', 'c']);  // '["a","b","c"]'
16 голосов
/ 13 марта 2011

jQuery.each просто зацикливается на массиве, ничего не делает с возвращаемым значением .Вы ищете jQuery.map (я также думаю, что get() не требуется, поскольку вы не имеете дело с объектами jQuery):

var blkstr = $.map(value, function(val,index) {                    
     var str = index + ":" + val;
     return str;
}).join(", ");  

DEMO


Но зачем вообще в этом случае использовать jQuery?map только вводит ненужный вызов функции для каждого элемента.

var values = [];

for(var i = 0, l = value.length; i < l; i++) {
    values.push(i + ':' + value[i]);
}

// or if you actually have an object:

for(var id in value) {
    if(value.hasOwnProperty(id)) {
        values.push(id + ':' + value[id]);
    }
}

var blkstr = values.join(', ');

∆: Используется только возвращаемое значение, независимо от того, должно ли оно продолжать циклически повторять элементы или нет.Возвращение «ложного» значения остановит цикл.

4 голосов
/ 04 сентября 2012

это моя функция, конвертировать объект или массив в json

function obj2json(_data){
    str = '{ ';
    first = true;
    $.each(_data, function(i, v) { 
        if(first != true)
            str += ",";
        else first = false;
        if ($.type(v)== 'object' )
            str += "'" + i + "':" + obj2arr(v) ;
        else if ($.type(v)== 'array')
            str += "'" + i + "':" + obj2arr(v) ;
        else{
            str +=  "'" + i + "':'" + v + "'";
        }
    });
    return str+= '}';
}

Я просто отредактировал в v0.2 ^. ^

 function obj2json(_data){
    str = (($.type(_data)== 'array')?'[ ': '{ ');
    first = true;
    $.each(_data, function(i, v) { 
        if(first != true)
            str += ",";
        else first = false;
        if ($.type(v)== 'object' )
            str += '"' + i + '":' + obj2json(v) ;
        else if ($.type(v)== 'array')
            str += '"' + i + '":' + obj2json(v) ;
        else{
            if($.type(_data)== 'array')
                str += '"' + v + '"';
            else
                str +=  '"' + i + '":"' + v + '"';
        }
    });
    return str+= (($.type(_data)== 'array')? ' ] ':' } ');;
}
2 голосов
/ 08 мая 2019

рабочий пример

var arr = ['a', 'b', 'c', 1, 2, '3'];

// using toString method
var rslt = arr.toString(); 
console.log(rslt);

// using join method. With a separator '-'
rslt = arr.join('-');
console.log(rslt);

// using join method. without a separator 
rslt = arr.join('');
console.log(rslt);
2 голосов
/ 19 апреля 2016

Мне нужен массив, чтобы стать представлением массива в виде строки Я имею в виду, что мне нужно это

var a = ['a','b','c'];
//became a "real" array string-like to pass on query params so was easy to do:
JSON.stringify(a); //-->"['a','b','c']"

может кому-то это нужно :)

2 голосов
/ 11 марта 2013

преобразовать массив в строку параметров GET, которая может быть добавлена ​​к URL, можно сделать следующим образом:

function encodeGet(array){
    return getParams = $.map(array , function(val,index) {                    
        var str = index + "=" + escape(val);
        return str;
   }).join("&");
}

вызвать эту функцию как

var getStr = encodeGet({
    search:     $('input[name="search"]').val(),
    location:   $('input[name="location"]').val(),
    dod:        $('input[name="dod"]').val(),
    type:       $('input[name="type"]').val()
});
window.location = '/site/search?'+getStr;

, которая будет перенаправлять пользователяна / сайт / поиск?страница с параметрами get, выделенными в массиве, заданном для encodeGet.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...