从 javascript 数组命名数据中删除 json 字符串格式的对象或项目?
Remove the object or item which I have in the json string format from javascript array named data?
var item = {"mtyp":2,"mtr":3,"qnt":51,"unt":"pint","nts":"cvbbcv"}
var data = [{"mtyp":"2","mtr":"2","qnt":"54","unt":"ml","nts":"ngvjn"},{"mtyp":"2","mtr":"3","qnt":"51","unt":"pint","nts":"cvbbcv"}]
输出应该是:
var data = [{"mtyp":"2","mtr":"2","qnt":"54","unt":"ml","nts":"ngvjn"}]
您可以使用我编写的以下脚本来满足您的要求。
我假设您的 JSON 对象在两端都有相似的键名,如果没有,请告诉我我会为您更新脚本。
您想要的结果将在结果数据中可用。
<script type="text/javascript">
var item = { "mtyp": 2, "mtr": 3, "qnt": 51, "unt": "pint", "nts": "cvbbcv" }
var data = [{ "mtyp": "2", "mtr": "2", "qnt": "54", "unt": "ml", "nts": "ngvjn" }, { "mtyp": "2", "mtr": "3", "qnt": "51", "unt": "pint", "nts": "cvbbcv" }]
// Holds the result data.
var resultdata = [{}];
// Remove initialized result set.
resultdata.pop();
// Variable to hold comparison value.
var hasMatch = false;
// Loop through data values.
for (var index = 0; index < data.length; ++index) {
// Fetch current item.
var individualData = data[index];
// Compare item values with individual data values.
if (item.mtyp == individualData.mtyp &&
item.mtr == individualData.mtr &&
item.qnt == individualData.qnt &&
item.unt == individualData.unt &&
item.nts == individualData.nts) {
hasMatch = true;
}
else {
hasMatch = false;
}
// If then is no match then add to the result.
// ResultData will hold all the values that are not present in item.
if (!hasMatch)
{ resultdata.push(individualData); }
}
</script>
虽然问题很不清楚,但如果您想获得一个新数组或原位(就地)解决方案,并且尽管某些值与类型不匹配,例如
qnt: 51
和
qnt: "51"
我建议使用 Array#filter
for the array itself and Object.keys
with Array#every
的组合来检查所有属性并获取所有不匹配的项目。
var item = { mtyp: 2, mtr: 3, qnt: 51, unt: "pint", nts: "cvbbcv" },
data = [{ mtyp: "2", mtr: "2", qnt: "54", unt: "ml", nts: "ngvjn" }, { mtyp: "2", mtr: "3", qnt: "51", unt: "pint", nts: "cvbbcv" }];
data = data.filter(function (a) {
return !Object.keys(item).every(function (k) {
return a[k] == item[k];
});
});
console.log(data);
var item = {"mtyp":2,"mtr":3,"qnt":51,"unt":"pint","nts":"cvbbcv"}
var data = [{"mtyp":"2","mtr":"2","qnt":"54","unt":"ml","nts":"ngvjn"},{"mtyp":"2","mtr":"3","qnt":"51","unt":"pint","nts":"cvbbcv"}]
输出应该是:
var data = [{"mtyp":"2","mtr":"2","qnt":"54","unt":"ml","nts":"ngvjn"}]
您可以使用我编写的以下脚本来满足您的要求。 我假设您的 JSON 对象在两端都有相似的键名,如果没有,请告诉我我会为您更新脚本。
您想要的结果将在结果数据中可用。
<script type="text/javascript">
var item = { "mtyp": 2, "mtr": 3, "qnt": 51, "unt": "pint", "nts": "cvbbcv" }
var data = [{ "mtyp": "2", "mtr": "2", "qnt": "54", "unt": "ml", "nts": "ngvjn" }, { "mtyp": "2", "mtr": "3", "qnt": "51", "unt": "pint", "nts": "cvbbcv" }]
// Holds the result data.
var resultdata = [{}];
// Remove initialized result set.
resultdata.pop();
// Variable to hold comparison value.
var hasMatch = false;
// Loop through data values.
for (var index = 0; index < data.length; ++index) {
// Fetch current item.
var individualData = data[index];
// Compare item values with individual data values.
if (item.mtyp == individualData.mtyp &&
item.mtr == individualData.mtr &&
item.qnt == individualData.qnt &&
item.unt == individualData.unt &&
item.nts == individualData.nts) {
hasMatch = true;
}
else {
hasMatch = false;
}
// If then is no match then add to the result.
// ResultData will hold all the values that are not present in item.
if (!hasMatch)
{ resultdata.push(individualData); }
}
</script>
虽然问题很不清楚,但如果您想获得一个新数组或原位(就地)解决方案,并且尽管某些值与类型不匹配,例如
qnt: 51
和
qnt: "51"
我建议使用 Array#filter
for the array itself and Object.keys
with Array#every
的组合来检查所有属性并获取所有不匹配的项目。
var item = { mtyp: 2, mtr: 3, qnt: 51, unt: "pint", nts: "cvbbcv" },
data = [{ mtyp: "2", mtr: "2", qnt: "54", unt: "ml", nts: "ngvjn" }, { mtyp: "2", mtr: "3", qnt: "51", unt: "pint", nts: "cvbbcv" }];
data = data.filter(function (a) {
return !Object.keys(item).every(function (k) {
return a[k] == item[k];
});
});
console.log(data);