Как получить ключ и значение объекта в javascript?

Имею объект как var obj = [{"PRODUCT_ID":"P01","M01":1,"M02":2, "M03": null}]. Я хочу получить ключ и оценить этот образец

PRODUCT_ID is P01
M01 is 1
M02 is 2
M03 is null

Я пытаюсь следовать

for (var key in obj) {
  if (obj.hasOwnProperty(key)) {
    console.info(key + " is " + obj[key]);
  }
}

Не работает, неверно отображается формат.

0 is [
1 is {
2 is "
3 is P
4 is R
5 is O
6 is D
...etc

Я использую для этого javascript. Если возможно, можно преобразовать в json и показать это.

Кажется, что obj - это строка. Можете ли вы поделиться выводом typeof obj ?

Satpal 03.04.2018 14:27

О, у тебя есть идея?

Brian Crist 03.04.2018 14:29

Это массив объектов с одним объектом в нем. удалите «[]» и попробуйте еще раз.

omer.ersoy 03.04.2018 14:30

@BrianCrist Я добавил ответ, надеюсь, он будет работать в соответствии с вашими ожиданиями. Спасибо

Rohit Jindal 04.04.2018 07:43
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
4
338
8
Перейти к ответу Данный вопрос помечен как решенный

Ответы 8

Вы можете использовать Object.entries() как:

const jsonString = '[{"PRODUCT_ID":"P01","M01":1,"M02":2, "M03": null}]'

// parse your json string first
const arr = JSON.parse( jsonString );

// Get the object from the array
const obj = arr[0] || {};

for (const [key, value] of Object.entries(obj)) {
  console.info(key + ' is '+value);
}

@BrianCrist Пожалуйста, попробуйте сначала использовать JSON.parse, чтобы получить фактический массив из строки JSON, как показано в демонстрации выше.

CodeNewbie 03.04.2018 14:58

Дело в том, что вы обрабатываете массив как объект. Измените свой код для:

for(x=0;x <obj.length;x++){
    // Here you have each object of your array.

     var json = obj[x];
     var arrayOfKeys = Object.keys (json);

    //other code.
 }

проблема в том, что вы запрашиваете obj, а фактический объект - obj[0]. obj - это массив из 1 элемента. попробуй это

var obj = [{"PRODUCT_ID":"P01","M01":1,"M02":2, "M03": null}];

for (var key in obj[0]) {
  if (obj[0].hasOwnProperty(key)) {
    console.info(key + " is " + obj[0][key]);
  }
}
<script src = "https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

Верно. Если бы вы могли изменить определение obj на obj = {"PRODUCT_ID":"P01","M01":1,"M02":2, "M03": null}, оно было бы более читабельным.

Alex 03.04.2018 14:32

Совершенно ясно, что OP не имеет объекта, прочтите вопрос.

Teemu 03.04.2018 14:32

@ Teemu, совершенно ясно, что это именно то, что я имел в виду под фактический obj - obj [0]

Scaramouche 03.04.2018 14:33

Прочтите вопрос, внимательно посмотрите на предоставленный вывод, что вы видите?

Teemu 03.04.2018 14:35

@BrianCrist, пожалуйста, покажите ошибку или какой-нибудь соответствующий отзыв, так как он работает во фрагменте, я не могу сказать, в чем проблема, у вас есть более одного элемента в вашем массиве obj в ваших реальных сценариях?

Scaramouche 03.04.2018 14:36

@ Teemu: я вижу, что OP хочет PRODUCT_ID is P01M01 is 1M02 is 2M03 is null, что именно то, что выводит фрагмент

Scaramouche 03.04.2018 14:37

Да, но это не решает проблему, с которой сталкивается OP.

Teemu 03.04.2018 14:38

@ Teemu буквально: Я хочу получить ключ и оценить этот образец:

Scaramouche 03.04.2018 14:39

Буквально прочтите вопрос ... "Не работает, неверно отображается формат." Тогда что вы видите? Символы так называемого объекта один за другим ... OP не имеет объекта, у них есть строка, и это их первая проблема, которую нужно решить, без решения которой любой ответ будет совершенно бесполезным.

Teemu 03.04.2018 14:39

@Scaramouche, я получил это в console.info 0 is [

Brian Crist 03.04.2018 14:43

@BrianCrist, так что, чтобы быть уверенным, в приведенном мной фрагменте он работает, но в вашем dev env бросает 0 is [? Вы уверены, что используете var obj = [{"PRODUCT_ID":"P01","M01":1,"M02":2, "M03": null}] в качестве тестового входа. Ранее я спросил вас, есть ли у obj (которому действительно стоит изменить имя на arr, поскольку мы установили, что это массив, а не объект) только 1 элемент или может быть больше

Scaramouche 03.04.2018 14:46

@Scaramouche, как сказал Теему,

Brian Crist 03.04.2018 14:53

См. Object.entries(), Array.prototype.map() и Template Literals для получения дополнительной информации.

// Input.
const input = [{"PRODUCT_ID":"P01","M01":1,"M02":2, "M03": null}]

// Output.
input.map(x => Object.entries(x).map(([key, value]) => console.info(`${key} is ${value}\n`)))

Совершенно ясно, что OP не имеет объекта, прочтите вопрос.

Teemu 03.04.2018 14:33

"У меня есть объект" @Teemu

Arman Charan 03.04.2018 14:34

Вот что они думают, посмотрите на результат.

Teemu 03.04.2018 14:34

@Teemu, я думаю, нам следует перейти на json или array. Ты так думаешь ?

Brian Crist 03.04.2018 14:46

@BrianCrist Сначала вам нужно выполнить JSON.parse, чтобы преобразовать вашу строку в объект, а затем следовать некоторым из этих ответов.

Teemu 03.04.2018 14:47

@ Teemu Точно, и что я должен делать?

Brian Crist 03.04.2018 14:57

используйте метод Object.keys () для доступа к ключам в вашем объекте, а затем просто объедините ключ с его значением.

это не самое элегантное решение, но оно поможет вам разобраться.

var obj = '[{"PRODUCT_ID":"P01","M01":1,"M02":2, "M03": null}]' //string
obj = JSON.parse(obj);
console.info(Object.keys(obj[0])) //so that you can see what this does

obj.forEach(object => {
   Object.keys(object).forEach(key => {
       $("#values").append($("<p>"+key +" is "+ object[key]+"</p>"));  
   });
});
<script src = "https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id = "values">
  
</div>

Извините, я получаю с ["0"]

Brian Crist 03.04.2018 14:38

Я понимаю, что у него есть массив объектов, и ответ касается этого

Aniruddha Gohad 03.04.2018 14:38

может он отредактировал вопрос, чтобы сделать его массивом? даже в этом случае я тоже займусь этим.

Aniruddha Gohad 03.04.2018 14:47

@Teemu см. Фрагмент строки.

Aniruddha Gohad 03.04.2018 14:49

Ваш код почти правильный. Но поскольку у вас есть массив данных, а не объект, вам нужно пройти через объект, чтобы получить желаемый результат.

У угадывания OP есть:

var obj = '[{"PRODUCT_ID":"P01","M01":1,"M02":2, "M03": null}]';
    for (var key in obj) {
         console.info(key + " is " + obj[key]);
    }

//var obj = [{"PRODUCT_ID":"P01","M01":1,"M02":2, "M03": null}]
var obj = '[{"PRODUCT_ID":"P01","M01":1,"M02":2, "M03": null}]';
obj = JSON.parse(obj);
for (var key in obj) {
  for (var k in obj[key]){
     console.info(k + " is " + obj[key][k]);
    }
}

Альтернатива:

//var obj = [{"PRODUCT_ID":"P01","M01":1,"M02":2, "M03": null}]
var obj = '[{"PRODUCT_ID":"P01","M01":1,"M02":2, "M03": null}]';
obj = JSON.parse(obj);
obj.map(e => Object.entries(e).map(([k, v]) => console.info(k, "is", v)))

Ваш код почти правильный, за исключением того, что он не решает проблему, с которой сталкивается OP. Ребята, вы больше не читаете вопросы? Почти все ответы на этот пост бесполезны для OP, включая этот ...

Teemu 03.04.2018 14:54

@ Teemu, чего хочет OP? Как получить ключ и значение объекта в javascript?

atiq1589 03.04.2018 14:57

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

Teemu 03.04.2018 14:58

что вы имеете в виду, что у них нет объекта? Оп четко сказал У меня есть объект как var obj = [{"PRODUCT_ID": "P01", "M01": 1, "M02": 2, "M03": null}]

atiq1589 03.04.2018 15:00

Прочтите, пожалуйста, весь вопрос! Выход предоставленного цикла for ..in полностью отличался бы от того, что OP говорит, что они получают, если бы у них был объект ...

Teemu 03.04.2018 15:00

Пожалуйста, объясни. Я прочитал вопрос и не понял вашей точки зрения.

atiq1589 03.04.2018 15:02

Затем мы должны попросить OP задать правильный вопрос. Я не могу предположить, что есть у OP. Я просто копирую объект из вопроса. Я предполагаю, что это может быть строка, тогда мы можем использовать JSON.parse ()

atiq1589 03.04.2018 15:04

@Teemu Пожалуйста, прочтите мой обновленный пост. Я думаю, вы имеете в виду это. Спасибо за информацию.

atiq1589 03.04.2018 15:07

Я предполагаю, что полученный вами объект - это строка, а не реальный объект или массив. Вот почему с вашим кодом он дает результат.

Чтобы преобразовать в фактический объект JS, используйте JSON.parse(), и он вернет массив, как ожидалось.

Например,

const myArray = JSON.parse(obj);
myArray.forEach(x => Object.entries(x).map(([key, value]) => console.info(`${key} is ${value}\n`)))
Ответ принят как подходящий

Наблюдение:

Оператор for...in выполняет итерацию по перечислимым свойствам объекта. Следовательно, согласно коду в OP :

var obj = [{
	"PRODUCT_ID": "P01",
	"M01": 1,
	"M02": 2,
	"M03": null
}];

for (var key in obj) {
  console.info(key); // 0
}

Попробуй это :

var obj = [{
	"PRODUCT_ID": "P01",
	"M01": 1,
	"M02": 2,
	"M03": null
}];

for (var i of obj) {
  for (var j in Object.keys(i)) {
    console.info(Object.keys(i)[j] + " is " + i[Object.keys(i)[j]]);
  }
}

Другие вопросы по теме