Перетворити масив javascript у рядок


115

Я намагаюся перебрати список "значення" і перетворити його в рядок. Ось код:

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

Функція alar () працює чудово і відображає належне значення. Але якось функція .get () jquery не отримує потрібний тип об'єкта і не працює. Що я роблю неправильно?


5
що таке "цінність"? Це масив? Якщо так, var str = value.join (',') може працювати добре.
StefanS

Так. Якщо я коментую частину .get (), то я отримую вікна попередження, у яких відображаються "id1: val1", "id2: val2" тощо.
Нео

Ви маєте на увазі "... отримати потрібний вид об'єкта"? (Швидкий корект перед тим, як натиснути Задати питання, як правило, є хорошою ідеєю.) (Я видалив попередній коментар, який був досить сильно поставлений - це питання має набагато меншу кількість друкарських помилок і таких, ніж багато.)
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()це просто ітераційний масив, не більше того.


118

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

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

Ось це зараз A - це струна. :)


7
Я б запропонував A.toString () замість цього, щоб було зрозуміліше, що ви робите.
Джастін

8
Якщо ви зробите [1,2,[3]].toString(), ви отримаєте 1,2,3, що досить сміття. Ця відповідь - лише гірший спосіб написати той самий виклик тому ж розбитому, рідному методу рядка. 42 оновлення ??
Карл Сміт

8
ви також можете приєднатись до масиву на зразок так['Sunday','Monday','Tuesday','Wednesday','Thursday'].join('');
etoxin

1
Array.join()безумовно, найкращий варіант, оскільки він не просто об'єднає значення з комами, але дозволить користувачеві визначити, як слід робити конкатенацію. Наприклад, ви можете використовувати кому + пробіл.
Феліпе Лео

1
Це ідеально для мене. Я передаю масив, який змінюється на рядок, розділений комами без пробілів для виклику api. Знову дякую.
Нік Д

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

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: Вам потрібно лише 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+= '}';
}

я просто редагую до 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')? ' ] ':' } ');;
}

3

Мені потрібен масив, щоб стати String-представленням масиву. Я маю на увазі, що мені це потрібно

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

який переадресує користувача на / сайт / пошук? сторінка з параметрами отримати параметри, викладені в масиві, заданому encodeGet.


1
Зауважте, що jQuery.param (масив) робить те, що робить encodeGet (масив).
Кертіс Яллоп

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


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"

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.