javascript - 按属性值计算数组中的对象并在 HTML 中显示结果
问题描述
我正在尝试添加计数modelname
并将其附加到span
元素。我首先尝试使用length
类似这样的 ID 来定位 ID,但我无法让它工作。最好的方法是什么?
var modelCount = document.getElementById('#modelcount');
modelCount.innerHTML = productList.modelname.length;
var productList = [{
"model": "halvskap",
"modelname": "Halvskåp",
"type": "Standard",
"typename": "Standard",
"family": "Berlin"
}, {
"model": "helskap",
"modelname": "Helskåp",
"type": "Parskap",
"typename": "Parskap",
"family": "Copenhagen"
}, {
"model": "helskap",
"modelname": "Helskåp",
"type": "Parskap",
"typename": "Parskap",
"family": "Copenhagen"
}, {
"model": "smafackskap",
"modelname": "Småfackskåp",
"type": "Standard",
"typename": "Standard",
"family": "Filippa"
}];
<div class="dropdown">
<div>
<input type="radio" name="model" id="halvskap" value="halvskap">
<label>Halvskåp</label>
<span></span>
</div>
<div>
<input type="radio" name="model" id="helskap" value="helskap">
<label>Helskåp</label>
<span id="modelcount"></span>
</div>
<div>
<input type="radio" name="model" id="smafackskap" value="smafackskap">
<label>Småfackskåp</label>
<span></span>
</div>
<div>
<input type="radio" name="model" id="zskap" value="zskap">
<label>Z-skåp</label>
<span></span>
</div>
</div>
解决方案
首先,您拥有的数据结构不是 JSON。它是一个对象数组。这可能影响了您所做的研究。
其次,对象中没有Filippa
属性,但我认为这只是转录问题中的代码的错误,所以我在下面的示例中添加了它。
要解决您的问题,您可以遍历数组并span
根据model
对象中的值增加相关值。尝试这个:
productList.Filippa.forEach(o => $('#' + o.model).siblings('span').text((i, t) => (parseInt(t, 10) || 0) + 1));
完整的工作示例:
var productList = {
Filippa: [{
"model": "halvskap",
"modelname": "Halvskåp",
"type": "Standard",
"typename": "Standard",
"family": "Berlin"
}, {
"model": "helskap",
"modelname": "Helskåp",
"type": "Parskap",
"typename": "Parskap",
"family": "Copenhagen"
}, {
"model": "helskap",
"modelname": "Helskåp",
"type": "Parskap",
"typename": "Parskap",
"family": "Copenhagen"
}, {
"model": "smafackskap",
"modelname": "Småfackskåp",
"type": "Standard",
"typename": "Standard",
"family": "Filippa"
}]
}
productList.Filippa.forEach(o => $('#' + o.model).siblings('span').text((i, t) => (parseInt(t, 10) || 0) + 1));
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div class="dropdown">
<div>
<input type="radio" name="model" id="halvskap" value="halvskap">
<label>Halvskåp</label>
(<span>0</span>)
</div>
<div>
<input type="radio" name="model" id="helskap" value="helskap">
<label>Helskåp</label>
(<span>0</span>)
</div>
<div>
<input type="radio" name="model" id="smafackskap" value="smafackskap">
<label>Småfackskåp</label>
(<span>0</span>)
</div>
<div>
<input type="radio" name="model" id="zskap" value="zskap">
<label>Z-skåp</label>
(<span>0</span>)
</div>
</div>
推荐阅读
- python - 按值拆分列表的快速方法?
- javascript - 如果变量类型没有由 var、let 或 const 初始化,或者仍然分配给数字类型,为什么它总是“字符串”?
- swiftui - SwiftUI:.sheet() 在关闭当前工作表时不会使用预期数据转到上一个视图
- python - python3上的打印语句不再登录谷歌云平台
- .net-core - 如何使用嵌入式调试类型的 VS 2019 代码覆盖率?
- c# - C# 数据表到字典
- c# - C# WebClient 下载某些页面的源代码,但不是全部
- c++ - C++) E0349 没有操作符匹配这些操作数
- .net-core - 如何从 VS 代码覆盖中排除测试程序集?
- swiftui - 无法转换类型 '(Int) -> VStack 的值