Javascript 从对象数组创建字符串
我有两个数组,如下所示:Javascript 从对象数组创建字符串,javascript,Javascript,我有两个数组,如下所示: var product1=[ { “品牌”:“一加一” }, { “品牌”:“一加一” } ]; var product2=[ { “品牌”:“一加一” }, { “品牌”:“苹果” } ]; 我想在数组中循环并打印以下内容: 如果是产品1,则输出您有2个一加 如果是产品2,则输出您有1个One Plus和1个Apple 下面是我尝试的代码 var product1=[ { “品牌”:“一加一” }, { “品牌”:“一加一” } ]; var product2=[
var product1=[
{
“品牌”:“一加一”
},
{
“品牌”:“一加一”
}
];
var product2=[
{
“品牌”:“一加一”
},
{
“品牌”:“苹果”
}
];
我想在数组中循环并打印以下内容:
您有2个一加
您有1个One Plus和1个Apple
var product1=[
{
“品牌”:“一加一”
},
{
“品牌”:“一加一”
}
];
var product2=[
{
“品牌”:“一加一”
},
{
“品牌”:“苹果”
}
];
计数器1={}
product1.forEach(功能(obj){
var key=JSON.stringify(obj)
计数器1[键]=(计数器1[键]| | 0)+1
});
控制台日志(计数器1);
计数器2={}
产品2.forEach(功能(obj){
var key=JSON.stringify(obj)
计数器2[键]=(计数器2[键]| | 0)+1
});
控制台日志(计数器2)代码>这个怎么样
var product1=[{
“品牌”:“一加一”
},
{
“品牌”:“一加一”
}
];
var product2=[{
“品牌”:“一加一”
},
{
“品牌”:“苹果”
}
];
功能产品(arr){
让计数器=arr.reduce((acc,val)=>
(acc[val.Brand]=(acc[val.Brand]| | 0)+1,acc),{};
让strings=Object.keys(counter.map)(k=>`${counter[k]}${k}`);
return`youhave${strings.join('and')}`;
}
console.log(countProducts(product1));
console.log(countProducts(product2))代码>
const product1=[
{品牌:“一加”},
{品牌:“一加”},
];
常数产品2=[
{品牌:“一加”},
{品牌:“苹果”},
];
函数WhatyYouhaven(列表){
return`youhave`+Object.entries(list.reduce)((a,c)=>{
a[c.品牌]=a[c.品牌]| | 0;
a[c.品牌]++;
返回a;
}.map(([brand,count])=>“${count}${brand}`”).join(`and`);
}
console.log(whatyouhaven(product1));
console.log(whatyouhaven(product2))代码>您首先必须计算发生的事件,
而不仅仅是字符串concat或模板的问题
函数strinify(a){
让发生={};
a、 forEach(函数(e,i){
如果(如品牌发生){
发生[例如品牌]++;
}否则{
发生率[e.品牌]=1;
}
});
设str=[];
用于(正在发生的品牌){
计数=事件[品牌];
str.push(计数+“”+品牌);
};
返回“youhave”+str.join(“and”);
}
控制台日志(strinify)([
{
“品牌”:“一加一”
},
{
“品牌”:“一加一”
},
{
“品牌”:“苹果”
}
]));代码>
const order1=[
{
“品牌”:“一加一”,
“测试”:“测试”
},
{
“品牌”:“一加一”
},
{
“酒吧”:“富”
}
];
常量顺序2=[
{
“品牌”:“一加一”
},
{
“品牌”:“苹果”
}
];
常量orderToString=(顺序)=>{
if(order==null)返回;
const productsWithBrand=order.filter(product=>Object.keys(product.includes('Brand'));
const productBrandCounter=(计数器,产品)=>(计数器[产品.品牌]=(计数器[产品.品牌]| 0)+1,计数器);
const countPerProduct=productsWithBrand.reduce(productBrandCounter,{});
const stringPerProduct=Object.keys(countPerProduct.map)(brand=>`${countPerProduct[brand]}${brand}`);
return`youhave${stringPerProduct.join('and')}`;
}
log(orderToString(order1))
JSON始终是一个字符串。为什么要将JSON.stringify(obj)
作为键,而不是仅使用obj.Brand
@user4642212回滚该编辑?很明显,string
不是这里的关键词。@Brad我没有回滚编辑,我同时编辑并查看修订历史以重新应用您的更改。这比从头开始要快。我根本不会使用JSON
。只需分组和计数:,然后减少密钥和计数。这与我自己的解决方案完全相同,兄弟。不过实用性要差一点。@gyohza真的!打败我!但是在你的减少中检查你的返回值?你是指这个位(acc[val.Brand]| | 0)+1
?是的,实际上是完全相同的表达方式实际上,这是一个相当标准的答案,所以难怪两者如此相似。@gyohza我的意思是在逗号后返回acc,这是一个我已经忘记的简洁的JS速记!谢谢
const product1s = product1.reduce((acc, product) => {
acc[product.Brand] = (acc[product.Brand] || 0) + 1;
return acc;
}, {});
console.log(
`You have ${
Object.keys(product1s).map(product => `${product1s[product]} ${product}`).join(" and ")
}`
);