【微信小程序】实现根据某一属性值分类渲染数组内容

需求与效果

实现根据某一属性值分类渲染数组,需求是:
数组如下,渲染在页面上时,根据p_num值进行分组渲染,p_num相同的放在同一容器里,容器外包裹边框。

array: [
{
    
    content: "内容1", id: "1", p_num: "1"},
{
    
    content: "内容2", id: "2", p_num: "1"},
{
    
    content: "内容3", id: "3", p_num: "2"},
{
    
    content: "内容4", id: "4", p_num: "2"},
{
    
    content: "内容5", id: "5", p_num: "3"},
{
    
    content: "内容6", id: "6", p_num: "3"}
]

效果:
在这里插入图片描述

实现

wxml

<view wx:for="{
    
    {pNums}}" wx:for-item="pNum">
  <view class="box">
    <view class="border">
      <view wx:for="{
    
    {array}}" wx:for-item="item" wx:if="{
    
    {item.p_num == pNum && !renderedPNums[pNum]}}">
        <view>{
    
    {
    
    item.content}}</view>
      </view>
      <view wx:if="{
    
    {!renderedPNums[pNum]}}" hidden="{
    
    {true}}" bindtap="setRenderedPNums" data-value="{
    
    {pNum}}"></view>
    </view>
  </view>
</view>

js

const app = getApp()
Page({
    
    
data: {
    
    
array: [], // 数组
pNums: [], // 所有的p_num值
renderedPNums: {
    
    } // 已经渲染过的p_num值
},
onLoad: function() {
    
    
// 初始化数组
this.setData({
    
    
array: [
{
    
    content: "内容1", id: "1", p_num: "1"},
{
    
    content: "内容2", id: "2", p_num: "1"},
{
    
    content: "内容3", id: "3", p_num: "2"},
{
    
    content: "内容4", id: "4", p_num: "2"},
{
    
    content: "内容5", id: "5", p_num: "3"},
{
    
    content: "内容6", id: "6", p_num: "3"}
]
})
// 获取所有的p_num值
let pNums = [];
for (let i = 0; i < this.data.array.length; i++) {
    
    
if (!pNums.includes(this.data.array[i].p_num)) {
    
    
pNums.push(this.data.array[i].p_num);
}
}
console.log(pNums)
this.setData({
    
    
pNums: pNums
})
},
// 更新已经渲染过的p_num值
setRenderedPNums: function(e) {
    
    
let p_num = e.target.dataset.value;
let renderedPNums = this.data.renderedPNums;
renderedPNums[p_num] = true;
this.setData({
    
    
renderedPNums: renderedPNums
})
}
})

wxss

.box {
    
    
  margin-top: 20rpx;
}

.border {
    
    
  border: 1rpx solid #ccc;
  padding: 20rpx;
}

参考

chatgpt

猜你喜欢

转载自blog.csdn.net/sinat_41838682/article/details/130152582