12

Преобразование объекта в строку

16

Как преобразовать объект JavaScript в строку?

У меня есть следующий объект JavaScript:

var o = {a: 1, b: 2};
console.log(o);
console.log('Item: ' + o);

В результате выполнения этого кода я получаю:

Object { a=1, b=2} // вполне читабельный вывод :)
Item: [object Object] // не понятно, что внутри :(

Как я могу преобразовать объект в строку так, чтобы сохранить его содержимое при выводе?

5 ответ(ов)

1

Чтобы упростить использование console, вы можете просто использовать запятую вместо +. Оператор + попытается преобразовать объект в строку, тогда как запятая отобразит его отдельно в консоли.

Пример:

var o = {a: 1, b: 2};
console.log(o);
console.log('Item: ' + o);
console.log('Item: ', o);   // :)

Вывод:

Object { a=1, b=2}           // полезно
Item: [object Object]        // не полезно
Item:  Object {a: 1, b: 2}   // лучшее из обоих миров! :)

Ссылка: https://developer.mozilla.org/en-US/docs/Web/API/Console.log

1

Конечно! Чтобы конвертировать объект в строку, вы можете использовать собственный метод, например:

function objToString (obj) {
    var str = '';
    for (var p in obj) {
        if (Object.prototype.hasOwnProperty.call(obj, p)) {
            str += p + '::' + obj[p] + '\n';
        }
    }
    return str;
}

На самом деле, приведенный выше код демонстрирует общий подход; вы также можете использовать что-то вроде http://phpjs.org/functions/var_export:578 или http://phpjs.org/functions/var_dump:604.

Если вы не используете методы (функции в качестве свойств объекта), вы можете воспользоваться новым стандартом (хотя он не поддерживается старыми браузерами, но для них тоже можно найти утилиты), то есть использовать JSON.stringify(). Однако учтите, что это не сработает, если объект содержит функции или другие свойства, которые не могут быть сериализованы в JSON.

Обновление:

Более современное решение может выглядеть так:

function objToString (obj) {
    let str = '';
    for (const [p, val] of Object.entries(obj)) {
        str += `${p}::${val}\n`;
    }
    return str;
}

или:

function objToString (obj) {
    return Object.entries(obj).reduce((str, [p, val]) => {
        return `${str}${p}::${val}\n`;
    }, '');
}
0

Если вы просто выводите информацию в консоль, вы можете использовать console.log('строка:', obj). Обратите внимание на запятую.

0

В случаях, когда вы знаете, что объект является простым типом данных, таким как Boolean, Date, String, число и т.д., функция JavaScript String() прекрасно справляется с этой задачей. Я недавно обнаружил, что это очень полезно при работе со значениями, получаемыми из функции $.each библиотеки jQuery.

Например, следующий код преобразует все элементы в переменной value в строку:

$.each(this, function (name, value) {
  alert(String(value));
});

Более подробную информацию можно найти здесь:

http://www.w3schools.com/jsref/jsref_string.asp

0

Вы можете использовать следующий код для преобразования объекта в строку с рекурсивным отступом:

function objToString(obj, ndeep) {
  if (obj == null) {
    return String(obj);
  }
  switch (typeof obj) {
    case "string":
      return '"' + obj + '"';
    case "function":
      return obj.name || obj.toString();
    case "object":
      var indent = Array(ndeep || 1).join('\t'),
          isArray = Array.isArray(obj);
      return '{['[+isArray] + Object.keys(obj).map(function(key) {
        return '\n\t' + indent + key + ': ' + objToString(obj[key], (ndeep || 1) + 1);
      }).join(',') + '\n' + indent + '}]'[+isArray];
    default:
      return obj.toString();
  }
}

Пример использования: objToString({ a: 1, b: { c: "test" } })

Этот код создает строковое представление объекта с учетом вложенности, что позволяет легко видеть структуру объектов и массивов. Если объект содержит функции, они будут отображаться в виде их имен или стандартной строки.

Чтобы ответить на вопрос, пожалуйста, войдите или зарегистрируйтесь