如果满足 Vue JS 中的特定条件,如何对特定数组项进行编号?
How to number specific array items if they meet specific condition in Vue JS?
假设我的 vue 状态中有如下所示的对象数组:
[
{name: "Daniel", default: false},
{name: "Ross", default: true},
{name: "Rachel", default: false},
{name: "Joey", default: false}
{name: "Monica", default: true}
{name: "Gunther", default: true}
]
在我的网页上,所有这些名称都已显示在列表中。我想在我的网页上显示如下:
- 丹尼尔
- 罗斯 - 默认 1
- 雷切尔
- 乔伊
- 莫妮卡 - 默认 2
- 冈瑟 - 默认 3
从上面的例子来看,我想我想达到的目的已经很清楚了。在 vue 中实现这个最简单的方法是什么?
你可以试试这个:
let defaultCount = 0;
const data = [
{ name: "Daniel", default: false },
{ name: "Ross", default: true },
{ name: "Rachel", default: false },
{ name: "Joey", default: false },
{ name: "Monica", default: true },
{ name: "Gunther", default: true },
].map((el) => {
if (el.default) {
defaultCount++;
return {
...el,
defCount: defaultCount,
};
} else {
return {
...el,
defCount: null,
};
}
});
console.log(data);
<li v-for="(item) in array" :key="item.name">
{{`${item.name}${item.defCount? ` - Default ${item.defCount}`:''}`}}
</li>
您可以使用 Array.map 遍历所有数组元素并生成您想要的结果
const data = [
{ name: "Daniel" , default: false },
{ name: "Ross" , default: true },
{ name: "Rachel" , default: false },
{ name: "Joey" , default: false },
{ name: "Monica" , default: true },
{ name: "Gunther", default: true }
];
let defaultCount = 0;
const res = data.map(item => `${item.name}${item.default? ` default ${++defaultCount}`:''}`)
console.log(res)
尝试使用 computed
属性。检查下面的代码片段
var app = new Vue({
el: '#app',
data() {
return {
list: [
{name: "Daniel", default: false},
{name: "Ross", default: true},
{name: "Rachel", default: false},
{name: "Joey", default: false},
{name: "Monica", default: true},
{name: "Gunther", default: true},
]
};
},
computed: {
getList() {
let index = 1;
return this.list.map(item => {
return item.default ? `${item.name} - Default ${index++}` : `${item.name}`;
});
}
}
})
<script src="https://cdnjs.cloudflare.com/ajax/libs/vue/2.5.17/vue.js"></script>
<div id="app">
<template>
<ul>
<li v-for="(item, index) in getList" :key="index">
{{item}}
</li>
</ul>
</template>
</div>
假设我的 vue 状态中有如下所示的对象数组:
[
{name: "Daniel", default: false},
{name: "Ross", default: true},
{name: "Rachel", default: false},
{name: "Joey", default: false}
{name: "Monica", default: true}
{name: "Gunther", default: true}
]
在我的网页上,所有这些名称都已显示在列表中。我想在我的网页上显示如下:
- 丹尼尔
- 罗斯 - 默认 1
- 雷切尔
- 乔伊
- 莫妮卡 - 默认 2
- 冈瑟 - 默认 3
从上面的例子来看,我想我想达到的目的已经很清楚了。在 vue 中实现这个最简单的方法是什么?
你可以试试这个:
let defaultCount = 0;
const data = [
{ name: "Daniel", default: false },
{ name: "Ross", default: true },
{ name: "Rachel", default: false },
{ name: "Joey", default: false },
{ name: "Monica", default: true },
{ name: "Gunther", default: true },
].map((el) => {
if (el.default) {
defaultCount++;
return {
...el,
defCount: defaultCount,
};
} else {
return {
...el,
defCount: null,
};
}
});
console.log(data);
<li v-for="(item) in array" :key="item.name">
{{`${item.name}${item.defCount? ` - Default ${item.defCount}`:''}`}}
</li>
您可以使用 Array.map 遍历所有数组元素并生成您想要的结果
const data = [
{ name: "Daniel" , default: false },
{ name: "Ross" , default: true },
{ name: "Rachel" , default: false },
{ name: "Joey" , default: false },
{ name: "Monica" , default: true },
{ name: "Gunther", default: true }
];
let defaultCount = 0;
const res = data.map(item => `${item.name}${item.default? ` default ${++defaultCount}`:''}`)
console.log(res)
尝试使用 computed
属性。检查下面的代码片段
var app = new Vue({
el: '#app',
data() {
return {
list: [
{name: "Daniel", default: false},
{name: "Ross", default: true},
{name: "Rachel", default: false},
{name: "Joey", default: false},
{name: "Monica", default: true},
{name: "Gunther", default: true},
]
};
},
computed: {
getList() {
let index = 1;
return this.list.map(item => {
return item.default ? `${item.name} - Default ${index++}` : `${item.name}`;
});
}
}
})
<script src="https://cdnjs.cloudflare.com/ajax/libs/vue/2.5.17/vue.js"></script>
<div id="app">
<template>
<ul>
<li v-for="(item, index) in getList" :key="index">
{{item}}
</li>
</ul>
</template>
</div>