어떻게 반복하고 있는 등 모든 구성원이 javascript 객체여야 값은 객체에는.
예를 들어, 이를 통해 내가 어떻게 루프 (액세스하면 your_name" "; 및 " your_message"; 각)?
var validation_messages = {
"key_1": {
"your_name": "jimmy",
"your_msg": "hello world"
},
"key_2": {
"your_name": "billy",
"your_msg": "foo equals bar"
}
}
for (var key in validation_messages) {
// skip loop if the property is from prototype
if (!validation_messages.hasOwnProperty(key)) continue;
var obj = validation_messages[key];
for (var prop in obj) {
// skip loop if the property is from prototype
if (!obj.hasOwnProperty(prop)) continue;
// your code
alert(prop + " = " + obj[prop]);
}
}
Ecma 스크립트 () '와' 5 '에서 로비치스키스 아리스프로토티페스포리치 결합할 수 있습니다 ()'.
<! - begin 스니핏: js 숨기십시오: 거짓값 콘솔: 진정한 바벨. > 거짓값 -;
var obj = {
first: "John",
last: "Doe"
};
//
// Visit non-inherited enumerable keys
//
Object.keys(obj).forEach(function(key) {
console.log(key, obj[key]);
});
끝 - < 스니핏 >;!
문제는 이런
for (var key in validation_messages) {
var obj = validation_messages[key];
for (var prop in obj) {
alert(prop + " = " + obj[prop]);
}
}
또한 다시 반복하고 있다는 object& # 39 의 프로토타입.
이와 함께 이를 피할 수 있습니다.
for (var key in validation_messages) {
if (validation_messages.hasOwnProperty(key)) {
var obj = validation_messages[key];
for (var prop in obj) {
if (obj.hasOwnProperty(prop)) {
alert(prop + " = " + obj[prop]);
}
}
}
}
"'javascript 로비치스키스 (미로비) 스포리치 (키 = >. { 콘솔드로그 (키). 현재 키 // 이름입니다. 콘솔드로그 (미로비 [핵심]). 현재 키 값을 //. }). "'
[이스빈] (https://jsbin.com/feribofaqa/edit? html 과 js, 콘솔, 출력)
"'javascript 오브ject.렌트리스 (미로비) 스포리치 (([키, 발]) = >. { 콘솔드로그 (키). 현재 키 // 이름입니다. 콘솔드로그 (발). 현재 키 값을 //. }). "'
"'javascript 오브ject.렌트리스 (미로비) 스포리치 (([키, 발]) = >. 콘솔드로그 (key, 발)); "'
[이스빈] [3]
반복할 경우에 대비하여 네스트된 개체에도 통해 사용할 수 있습니다 재귀 함수 (ES6):
"'javascript const 룹네스테도비 = obj = >. { 로비치스키스 (목표) 스포리치 (키 = >. { if ([] 키를 & obj &; [핵심] = obj 메리 페로프 object" ";) 룹네스테도비 ([] 키를 obj). // 재귀. 다른 콘솔드로그 (key, obj [핵심]). 뭔가 키와 함께 // 또는 발. }). }; "'
[이스빈] (https://jsbin.com/ruravuhelu/edit? html 과 js, 콘솔, 출력)
위와 같은 기능을 갖추고 있지만, ES7 '대신' 로비치스키스 오브ject.렌트리스 () ' ()'.
"'javascript const 룹네스테도비 = obj = >. { 오브ject.렌트리스 (목표) 스포리치 (([키, 발]) = >. { if (val & &; object" 메리 페로프 발 = ";) 룹네스테도비 (발). // 재귀. 다른 콘솔드로그 (key, 발). 뭔가 키와 함께 // 또는 발. }). }; "'
여기서 우리는 한 새 객체를 사용하여 이동 및 반환 값을 변경할 네스트된 객체에는 루핑 () '와' 오브ject.렌트리스 ['오브ject.프로멘트리스 ()'] (https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/fromEntries) ( ES10/2019):
"'javascript const 룹네스테도비 = obj = >. 오브ject.프로멘트리스 ( 오브ject.렌트리스 (목표) 오마프 (([키, 발]) = >. { if (val & &; object" 메리 페로프 발 = ";) [키, 룹네스테도비 (발)]; 재귀 // 다른 [키, 업다테미발 (발)]; 뭔가 키와 함께 // 또는 발. }) ); "'
[3]: html 과 js, 콘솔, 출력입니다 https://jsbin.com/tokotusuze/1/edit?
Using [언더스코엘가이스 '의' _.each] [1]:
_.each(validation_messages, function(value, key){
_.each(value, function(value, key){
console.log(value);
});
});
[1]: http://underscorejs.org/ # 각
반복 사용하는 경우 모든 object properties 깊이까지의 되돌릴 수 있습니다 -
function lookdeep(object){
var collection= [], index= 0, next, item;
for(item in object){
if(object.hasOwnProperty(item)){
next= object[item];
if(typeof next== 'object' && next!= null){
collection[index++]= item +
':{ '+ lookdeep(next).join(', ')+'}';
}
else collection[index++]= [item+':'+String(next)];
}
}
return collection;
}
//example
var O={
a:1, b:2, c:{
c1:3, c2:4, c3:{
t:true, f:false
}
},
d:11
};
var lookdeepSample= 'O={'+ lookdeep(O).join(',\n')+'}';
/* returned value: (String)
O={
a:1,
b:2,
c:{
c1:3, c2:4, c3:{
t:true, f:false
}
},
d:11
}
*/
>. 이 질문에 백업이었습니다 계획하고 있는 솔루션을 제공한 이 >. 사후 일부 [성능 >. 피드백] (https://jsperf.com/es7-and-misc-loops). 아직 2 생쥐라. >. # 39, 사용 및 OP didn& 언급하십시오 말해달라는 시동키는 액세스하려면 포락선으로 사용할 경우 위해 t >. 루프 중에 과정이다.
let k;
for (k of Object.keys(obj)) {
/* k : key
* obj[k] : value
*/
}
let k;
for (k in obj) {
/* k : key
* obj[k] : value
*/
}
이 번호요 함께 사용할 수 있으므로 신중한 prototype& 인쇄하십시오 # 39 의 속성을; d '목표' *
이 es7 외곽진입 *
for (const [key, value] of Object.entries(obj)) {
}
단, 당시 나는 # 39, 이 때문에 편집하십시오 wouldn& 추천합니까 ES7 방법을 많이 JavaScript 초기화되는지 com/go/4e6b330a_kr 내부적으로 t 이 절차를 구축하십시오 (자세한 내용은 대한 피드백 대비성). 앱 개발 있지 않으면 안 할 수 있는 거대한 최적화이든 신앙이니라 최적화됩니다 it.* 생각해야 할 것은 확인 후 우선 순위가 높은 너회가
II. * 각 값뿐만 액세스하려면 누르기만 하면
let v;
for (v of Object.values(obj)) {
}
'-' 또는 '캐싱과는 로비치스키스 오브ject.발 주' 성능은 거의 없습니다
예를 들어,
const keys = Object.keys(obj);
let i;
for (i of keys) {
//
}
// same as
for (i of Object.keys(obj)) {
//
}
'기본' 을 통해 '루프 변수를 사용하는 경우, "에 대한 오브ject.발 주 캐싱된 firefox 에서 나온 것으로 보인다' '루프지 퍼트로프 사용할 때보다 좀더 빠른 그러나 중요한 것은 아니다 '는' 토종 '차이' 에 대한 보다 빠른 실행, 크롬 퍼트로프 루프 도왔으매 꼭 이래야겠어요 추천합니까 퍼트로프 다룰 때 사용할 수 있는 '' '오브ject.발 주' 믿지아니하며 건 (4) 과 6 테스트).
'For.in' 이 느린 Firefox 에서 루프가 정말 우리가 원하는 외면하였나니 캐시하려면 이터레이션은 로비치스키스 '중' 키를 사용하는 것이 좋습니다. 크롬 플러스 (첫 번째 및 마지막 테스트를) 는 모두 동일할 경우 실행 속도가 구조.
>. 여기에 테스트를 확인할 수 있습니다. >. [https://jsperf.com/es7-and-misc-loops] (https://jsperf.com/es7-and-misc-loops)
var key, obj, prop, owns = Object.prototype.hasOwnProperty;
for (key in validation_messages ) {
if (owns.call(validation_messages, key)) {
obj = validation_messages[key];
for (prop in obj ) {
// using obj.hasOwnProperty might cause you headache if there is
// obj.hasOwnProperty = function(){return false;}
// but owns will always work
if (owns.call(obj, prop)) {
console.log(prop, "=", obj[prop]);
}
}
}
}
몇 가지 방법을 그렇잖아요.
1) 2 레이어에는 루프지 for.in
for (let key in validation_messages) {
const vmKeys = validation_messages[key];
for (let vmKey in vmKeys) {
console.log(vmKey + vmKeys[vmKey]);
}
}
2) '를 사용하여 로비치스키'
Object.keys(validation_messages).forEach(key => {
const vmKeys = validation_messages[key];
Object.keys(vmKeys).forEach(key => {
console.log(vmKeys + vmKeys[key]);
});
});
3) 재귀 함수
const recursiveObj = obj => {
for(let key in obj){
if(!obj.hasOwnProperty(key)) continue;
if(typeof obj[key] !== 'object'){
console.log(key + obj[key]);
} else {
recursiveObj(obj[key]);
}
}
}
및 call it like:
recursiveObj(validation_messages);
Here comes the s # 39, 재귀 버전니다 AgileJon& 개선 및 솔루션 ([데모] (
):function loopThrough(obj){
for(var key in obj){
// skip loop if the property is from prototype
if(!obj.hasOwnProperty(key)) continue;
if(typeof obj[key] !== 'object'){
//your code
console.log(key+" = "+obj[key]);
} else {
loopThrough(obj[key]);
}
}
}
loopThrough(validation_messages);
이 솔루션은 일하는 모든 종류의 다른 깊이의.
2017년 한 달 전, 그냥 ecma 스크립트 최종 cxp 오브ject.발 주 (). 이제 이 작업을 수행할 수 있습니다.
let v;
for (v of Object.values(validation_messages))
console.log(v.your_name); // jimmy billy
참조: https://api.jquery.com/each/
예를 들면 다음과 같습니다.
$('.foo').each(function() {
console.log($(this));
});
$ (이) '' 단일 품목으로 δ1 객체에는 있다. 스왑이란 '$ (& # 39, .foo& # 39;)' 을 사용할 경우, s, t # 39 가변적입니다 don& jQuery& # 39 선택기를 엔진.
여기서, 제가 이 주위에 있는 다른 플레이 한 후 응답을 했다. # 39 의 해키 it& 있지만 작동하잖아!
이 개체의:
var myObj = {
pageURL : "BLAH",
emailBox : {model:"emailAddress", selector:"#emailAddress"},
passwordBox: {model:"password" , selector:"#password"}
};
. 이 코드:
// Get every value in the object into a separate array item ...
function buildArray(p_MainObj, p_Name) {
var variableList = [];
var thisVar = "";
var thisYes = false;
for (var key in p_MainObj) {
thisVar = p_Name + "." + key;
thisYes = false;
if (p_MainObj.hasOwnProperty(key)) {
var obj = p_MainObj[key];
for (var prop in obj) {
var myregex = /^[0-9]*$/;
if (myregex.exec(prop) != prop) {
thisYes = true;
variableList.push({item:thisVar + "." + prop,value:obj[prop]});
}
}
if ( ! thisYes )
variableList.push({item:thisVar,value:obj});
}
}
return variableList;
}
// Get the object items into a simple array ...
var objectItems = buildArray(myObj, "myObj");
// Now use them / test them etc... as you need to!
for (var x=0; x < objectItems.length; ++x) {
console.log(objectItems[x].item + " = " + objectItems[x].value);
}
. 이 중 콘솔입니다 생산한다.
myObj.pageURL = BLAH
myObj.emailBox.model = emailAddress
myObj.emailBox.selector = #emailAddress
myObj.passwordBox.model = password
myObj.passwordBox.selector = #password
이 솔루션을 사용할 수 있는 for me 는 다음과 같은
_private.convertParams=function(params){
var params= [];
Object.keys(values).forEach(function(key) {
params.push({"id":key,"option":"Igual","value":params[key].id})
});
return params;
}