从对象中获取值并设置复选框状态



在下面的示例中,我需要第一个复选框为checked,第二个和第三个复选框分别为unchecked

目前我正在获取所有的checked

let data = {"admin":"true","nts":"false","chat":"false"};
$('button').on('click', function(){
$('.bcheck').each(function(){
let x = $(this).attr('data-x');
$(this).attr('checked', data[x]);
});
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<input type='checkbox' class='bcheck' data-x='admin'>
<input type='checkbox' class='bcheck' data-x='nts'>
<input type='checkbox' class='bcheck' data-x='chat'>
<button>CLICK</button>

data对象中的值都是字符串。因此,它们都将评估为true。丢掉绳子,让它们变成布尔。

let data = {
"admin": true,
"nts": false,
"chat": false
};
$('button').on('click', function() {
$('.bcheck').each(function() {
let x = $(this).attr('data-x');
console.log(data[x]);
$(this).attr('checked', data[x]);
});
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<input type='checkbox' class='bcheck' data-x='admin'>
<input type='checkbox' class='bcheck' data-x='nts'>
<input type='checkbox' class='bcheck' data-x='chat'>
<button>CLICK</button>

字符串"false"不是falsy(请在控制台中尝试!!"false" === true(。你能把字符串改成正则布尔值(false(吗?

编辑应该这样做:

let transformedData = {};
const dataEntries = Object.entries(data).map((entry) => {
return { [entry[0]]: !(entry[1] === "false") };
});
for (const entry of dataEntries) {
transformedData = { ...transformedData, ...entry };
}

最新更新