如何将对象的键和值转换为逗号分隔的字符串?

时间:2018-12-20 07:24:40

标签: javascript

我有一个看起来像这样的对象:

obj = { apples: 2, eggs: 4, potato: 1 }

我想返回一个像这样的字符串:I have 2 apples, 4 eggs, 1 potato

我尝试了以下操作:

arr = [];
obj = { apples: 2, eggs: 4, potato: 1 };

for (var key in obj) {
    if (obj.hasOwnProperty(key)) {
        arr.push(`${obj[key]} ${key}`)
    }
}

console.log(arr);

for (i=0; i<arr.length; i++) {
  console.log(`I have ${arr[i]}`)
}

我不知道如何将它们放在一起

9 个答案:

答案 0 :(得分:2)

您使用Object.keys(),ES2015 template literalsjoin这样的方法:

let obj = { apples: 2, eggs: 4, potato: 1 };

let es6Output = `I have ${Object.keys(obj).map(key => `${obj[key]} ${key}`).join(', ')}`;

// if your browser doesn't support ES2015
let es5Output = "I have " + Object.keys(obj).map(function(key) {
  return obj[key] + " " + key
}).join(', ');

console.log(es6Output);
console.log(es5Output);

答案 1 :(得分:0)

您可以使用Object.keys(obj)获取对象的所有属性。 然后,您可以使用[]语法来获取该属性的值。

let obj = { apples: 2, eggs: 4, potato: 1 };
let message = "I have ";
Object.keys(obj).forEach(function (key) {
  message += obj[key] + " " + key + ", ";
});
message = message.substring(0, message.length - 2) + ".";
console.log(message);

答案 2 :(得分:0)

您有一些可用的选择。 JavaScript中的字符串可以与+运算符组合。

console.log("This " + "is a sentence.")

要访问对象中的键,可以使用点符号:

console.log({eggs: 4}.eggs)

或括号符号:

console.log({eggs: 4}['eggs'])

因此,要创建您的字符串,您可以始终使用相同的结构

var obj = { apples: 2, eggs: 4, potato: 1 }
console.log('I have ' + obj.apples + ' apples, ' + obj.eggs + ' eggs, ' + obj.potato + ' potato.';

或者顺序无关紧要,您可以使用循环:

var str = 'I have', i = 0, foods = { apples: 2, eggs: 4, potatoes: 1 }, count, item;
for(item in foods){
  count = foods[item];
  str = str + (i ? ', ' : (i++ && '')) + count + ' ' + item;
}

console.log(str.replace(', '+ count + ' ' + item, (i > 2 ? ', ' : ' ') + 'and ' + count + ' ' + item + '.'))

答案 3 :(得分:0)

您可以像这样使用Object.keys:

var obj = {
    apples: 2,
    eggs: 4,
    potato: 1
};

var string = "I have ";
Object.keys(obj).forEach(prop => string += `${obj[prop]} ${prop}, `;);
console.log(string);

答案 4 :(得分:0)

如果您使用for in方法访问对象中的每个属性,则该属性已经是字符串。

由于所有属性的值都是数字,所以您要做的就是将这些值从数字转换为字符串,请参见下文。

obj = { apples: 2, eggs: 4, potato: 1 }    

for (let propa in obj) {
    console.log(`I have ${obj[propa]} ${propa.toString()}`)
}

要使其按照您的方式工作,应如下所示:

obj = { apples: 2, eggs: 4, potato: 1 }
let collection = []

for (let propa in obj) {
    collection.push(`I have ${obj[propa]} ${propa}`)
}

答案 5 :(得分:0)

我刚把这个作为解决方案。其中 hudlesList 列表对象是这样的 {name: "hock", account_folder_id: 354421}

this.huddlesList.forEach((e) => {
           this.huddlesListWComma +=e.name;
           this.huddlesListWComma +=', ';
                    })

         this.huddlesListWComma = this.huddlesListWComma.replace(/,\s*$/, "");

this.huddlesListWComma

hock, Ali Amjad - 1, Ali Amjad - 2, Ash Leo, ZXCVBNM1212312, Jane Roe, H11, Assess JV, Test 3/1/21 - Assessment Safari, Ash Leo - 6

答案 6 :(得分:-1)

这应该为您解决问题。

let obj = { apples: 2, eggs: 4, potato: 1 }
let string = "I have " + obj.apples.toString() + " apples, " + obj.eggs.toString() + " eggs, " + obj.potato.toString() + " potato.";
console.log(string);

答案 7 :(得分:-1)

这应该对您有用...

   $(function(){
   obj = { apples: 2, eggs: 4, potato: 1 }

      var str = "I Have ";
       $.each(obj, function(index){
        str = str + index + " " + this + " , ";
       });


      alert(str);
       });

答案 8 :(得分:-1)

这是应该如何工作的:

var food = {apples:2, eggs:4, potato:1};
alert(food["apples"]);