Преобразовать массив javascript в строку

115

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

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

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

Нео
источник
5
что такое "ценность"? Это массив? В таком случае var str = value.join (',') может работать нормально.
StefanS
Да. Если я закомментирую часть .get (), я получаю окна предупреждений, в которых отображается «id1: val1», «id2: val2» и т. Д.
Neo
Вы имеете в виду «... получить правильный вид объекта»? (Быстрая вычитка перед нажатием кнопки «Задать вопрос» обычно является хорошей идеей.) (Я удалил свой предыдущий комментарий, который был сформулирован более строго - в этом вопросе гораздо меньше опечаток и т. Д.)
TJ Crowder,

Ответы:

131

Если 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()просто повторяет массив, не более того.

Shadow Wizard - это ваше ухо
источник
118

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

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

Вот и все. Теперь A - это строка. :)

Человек-паук
источник
7
Я бы предложил вместо этого A.toString (), чтобы было более понятно, что вы делаете.
Джастин
8
Если вы это сделаете [1,2,[3]].toString(), вы получите 1,2,3, что довольно вздорно. Этот ответ - просто худший способ написать тот же вызов тому же самому неработающему строковому методу. 42 голоса за ??
Carl Smith
8
вы также можете присоединиться к такому массиву['Sunday','Monday','Tuesday','Wednesday','Thursday'].join('');
этоксин
1
Array.join()определенно лучший вариант, поскольку он не просто объединяет значения запятыми, но позволяет пользователю определять, как должно выполняться объединение. Например, вы можете использовать запятую + пробел.
Фелипе Леан
1
Это идеально подходит для меня. Я передаю массив, который изменяется на строку, разделенную запятыми, без пробелов для вызова API. Еще раз спасибо.
Nick D
104

Вы можете использовать .toString()для присоединения к массиву через запятую.

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

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

Джастин
источник
3
Я просто надеялся, что массив будет буквально переведен в строку, а затем мне придется использовать Regex для обрезки жира, но это так намного лучше! Спасибо, Джастин.
клюква
52

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

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

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

А, Б, В

Николас
источник
1
это самый простой способ, престижность
Джимми Обоньо Абор
1
Мне нужен был один лишний пробел для запятой, это был единственный простой способ.
Talha Talip Açıkgöz
1
Самый простой и легкий способ. Спасибо
Рауль А.
36

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

Принуждение к струне

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"]'
VIJAY P
источник
17

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(', ');

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

Феликс Клинг
источник
Я как бы вставил сюда "очищенный" код. Я действительно имею дело с объектами jquery. Спасибо, карта работает отлично.
Neo,
@Neo: вам нужно только, mapесли valueэто объект jQuery. И тогда вы должны использовать value.map(...).get(). Но если у вас есть просто массив объектов jQuery, вам не нужно get. Пожалуйста :)
Феликс Клинг
9

использование join() и разделитель.

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

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);

Дипу Регунатх
источник
4

это моя функция, преобразовать объект или массив в 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+= '}';
}

Я просто редактирую версию 0.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')? ' ] ':' } ');;
}
buitanan
источник
3

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

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']"

может кому надо :)

Magico
источник
2
var arr = new Array();

var blkstr = $.each([1, 2, 3], function(idx2,val2) {                    
    arr.push(idx2 + ":" + val2);
    return arr;
}).join(', ');

console.log(blkstr);

ИЛИ

var arr = new Array();

$.each([1, 2, 3], function(idx2,val2) {                    
    arr.push(idx2 + ":" + val2);

});

console.log(arr.join(', '));
Сантош Линкха
источник
2

преобразовать массив в строку параметров 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;

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

Fydo
источник
1
Обратите внимание, что jQuery.param (array) делает то же, что encodeGet (array).
Curtis Yallop
1

Не следует путать массив со списками ... Это список: {...}, не имеющий длины или других свойств массива.

Это массив: [...], и вы можете использовать функции массива, методы и т. Д., Как это предложено здесь: someArray.toString ();

"SomeObj.toString ();" просто не будет работать ни с одним другим типом объектов, например со списками. ;-)

Педро Феррейра
источник
0

Array.prototype.toString ()

Метод toString () возвращает строку, представляющую указанный массив и его элементы.

var months = ["Jan", "Feb", "Mar", "Apr"];
months.toString(); // "Jan,Feb,Mar,Apr"

Синтаксис

arr.toString()

Возвращаемое значение

Строка, представляющая элементы массива.

Чтобы получить больше информации :

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/toString

KARTHIKEYAN.A
источник
0

Вот пример использования функций подчеркивания.

var exampleArray = [{name: 'moe', age: 40}, {name: 'larry', age: 50}, {name: 'curly', age: 60}];
var finalArray = _.compact(_.pluck(exampleArray,"name")).join(",");

Окончательный результат будет «moe, larry, curly».

Сабин
источник