Имею объект как 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 и показать это.
О, у тебя есть идея?
Это массив объектов с одним объектом в нем. удалите «[]» и попробуйте еще раз.
@BrianCrist Я добавил ответ, надеюсь, он будет работать в соответствии с вашими ожиданиями. Спасибо



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Вы можете использовать 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, как показано в демонстрации выше.
Дело в том, что вы обрабатываете массив как объект. Измените свой код для:
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}, оно было бы более читабельным.
Совершенно ясно, что OP не имеет объекта, прочтите вопрос.
@ Teemu, совершенно ясно, что это именно то, что я имел в виду под фактический obj - obj [0]
Прочтите вопрос, внимательно посмотрите на предоставленный вывод, что вы видите?
@BrianCrist, пожалуйста, покажите ошибку или какой-нибудь соответствующий отзыв, так как он работает во фрагменте, я не могу сказать, в чем проблема, у вас есть более одного элемента в вашем массиве obj в ваших реальных сценариях?
@ Teemu: я вижу, что OP хочет PRODUCT_ID is P01M01 is 1M02 is 2M03 is null, что именно то, что выводит фрагмент
Да, но это не решает проблему, с которой сталкивается OP.
@ Teemu буквально: Я хочу получить ключ и оценить этот образец:
Буквально прочтите вопрос ... "Не работает, неверно отображается формат." Тогда что вы видите? Символы так называемого объекта один за другим ... OP не имеет объекта, у них есть строка, и это их первая проблема, которую нужно решить, без решения которой любой ответ будет совершенно бесполезным.
@Scaramouche, я получил это в console.info 0 is [
@BrianCrist, так что, чтобы быть уверенным, в приведенном мной фрагменте он работает, но в вашем dev env бросает 0 is [? Вы уверены, что используете var obj = [{"PRODUCT_ID":"P01","M01":1,"M02":2, "M03": null}] в качестве тестового входа. Ранее я спросил вас, есть ли у obj (которому действительно стоит изменить имя на arr, поскольку мы установили, что это массив, а не объект) только 1 элемент или может быть больше
@Scaramouche, как сказал Теему,
См. 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
Вот что они думают, посмотрите на результат.
@Teemu, я думаю, нам следует перейти на json или array. Ты так думаешь ?
@BrianCrist Сначала вам нужно выполнить JSON.parse, чтобы преобразовать вашу строку в объект, а затем следовать некоторым из этих ответов.
@ Teemu Точно, и что я должен делать?
используйте метод 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"]
Я понимаю, что у него есть массив объектов, и ответ касается этого
может он отредактировал вопрос, чтобы сделать его массивом? даже в этом случае я тоже займусь этим.
@Teemu см. Фрагмент строки.
Ваш код почти правильный. Но поскольку у вас есть массив данных, а не объект, вам нужно пройти через объект, чтобы получить желаемый результат.
У угадывания 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, чего хочет OP? Как получить ключ и значение объекта в javascript?
Ага, но проблема в том, что у них нет объекта ... Как я уже сказал, вы, ребята, больше не читаете вопросы?
что вы имеете в виду, что у них нет объекта? Оп четко сказал У меня есть объект как var obj = [{"PRODUCT_ID": "P01", "M01": 1, "M02": 2, "M03": null}]
Прочтите, пожалуйста, весь вопрос! Выход предоставленного цикла for ..in полностью отличался бы от того, что OP говорит, что они получают, если бы у них был объект ...
Пожалуйста, объясни. Я прочитал вопрос и не понял вашей точки зрения.
Затем мы должны попросить OP задать правильный вопрос. Я не могу предположить, что есть у OP. Я просто копирую объект из вопроса. Я предполагаю, что это может быть строка, тогда мы можем использовать JSON.parse ()
@Teemu Пожалуйста, прочтите мой обновленный пост. Я думаю, вы имеете в виду это. Спасибо за информацию.
Я предполагаю, что полученный вами объект - это строка, а не реальный объект или массив. Вот почему с вашим кодом он дает результат.
Чтобы преобразовать в фактический объект 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]]);
}
}
Кажется, что
obj- это строка. Можете ли вы поделиться выводомtypeof obj?