Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/436.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何使用for in循环遍历嵌套对象并返回连接的每个属性字符串?_Javascript_String_Object - Fatal编程技术网

Javascript 如何使用for in循环遍历嵌套对象并返回连接的每个属性字符串?

Javascript 如何使用for in循环遍历嵌套对象并返回连接的每个属性字符串?,javascript,string,object,Javascript,String,Object,例如,我想将first、middle和last的属性值打印为串联字符串 最终输出为:“John p.Doe” 您不需要循环,只需连接属性即可 var fullname = person.name.first + ' ' + person.name.middle + ' ' + person.name.last; 使用for in循环将是一个坏主意,因为不能保证对象保持其顺序。因此,你可能会以Doe John P.取而代之。这些类型的问题已经发布了数百万次,在提问之前做一些研究 无论如何: al

例如,我想将first、middle和last的属性值打印为串联字符串

最终输出为:“John p.Doe”


您不需要循环,只需连接属性即可

var fullname = person.name.first + ' ' + person.name.middle + ' ' + person.name.last;

使用
for in
循环将是一个坏主意,因为不能保证对象保持其顺序。因此,你可能会以Doe John P.取而代之。

这些类型的问题已经发布了数百万次,在提问之前做一些研究

无论如何:

alert(person.name.first + ' ' + person.name.middle + ' ' + person.name.last);

为此,可以使用object.reduce

检查此代码段

var-person={
姓名:{
第一个:'约翰',
中间:“P”,
最后:“Doe”
},
年龄:35岁,
家乡:田纳西州纳什维尔
};
var nameObject=person.name;
var fullname=Object.keys(nameObject).reduce(函数(上一个,键){
返回上一个+“”+nameObject[键];
}, "");

console.log(全名)您可以使用一个数组作为所需的属性名称(这将保持顺序),并映射值并将其连接到一个空格分隔的字符串

var person={name:{第一个:“约翰”,中间:“P”,最后一个:“多伊”},年龄:35岁,家乡:田纳西州纳什维尔};
log(['first',middle','last'].map(函数(k){
返回人。名称[k];

}).加入(“”)您可以使用解构赋值

var-person={
姓名:{
第一个:'约翰',
中间:“P”,
最后:“Doe”
},
年龄:35岁,
家乡:田纳西州纳什维尔
};
var{first,middle,last}=person.name;
var fullname=`${first}${middle}${last}`;

console.log(全名)正如Barmar的回答所暗示的,您的示例只需要简单的连接即可给出结果

但是,在更一般的情况下,您可能希望遍历对象的每个属性,如果该属性是对象,则也要遍历该对象

例如:

function iterateThroughAllProperties(obj) {
    Object.keys(obj).forEach(function(key, index) {
        if(typeof obj[key] !== null && typeof obj[key] === 'object') {
            iterateThroughAllProperties(obj[key]);
        }
        else {
            // Do something with the property.
            console.log(obj[key]);
        }
    });
}

为什么你认为你需要一个循环?只需连接3个属性。是否只有一个人?您提到了一个循环,但您的示例并不需要使用循环。相关:谢谢Barmar!!对编程来说很陌生。我没意识到我可以连接它们。这是非常有用的!您应该通过单击旁边的复选标记来接受解决问题的答案。谢谢!在我意识到它有多么简单之前,我一直在思考这个解决方案。我一定会研究的。
function iterateThroughAllProperties(obj) {
    Object.keys(obj).forEach(function(key, index) {
        if(typeof obj[key] !== null && typeof obj[key] === 'object') {
            iterateThroughAllProperties(obj[key]);
        }
        else {
            // Do something with the property.
            console.log(obj[key]);
        }
    });
}