输入数组:
[ “温度/ 1 /休闲/空”, “temp / 1 / Lounge / 66,66,66,66,66,66,66,66,64,64,64,64 ......,64,64,64,64,64,64,64”,“temp / 2 /休闲/空”, “温度/ 3 /休闲/空”]
我有一个如上所示的元素数组。 每个项目有四个部分由('/')分隔。 如果前三个部分相同而第四个部分对于任何两个项目是不同的。我想删除第四部分为“空”的项目。
实施例: 如果元素的第四部分在一个项目中有“空”,而在另一个元素中有一些数据,如66,64,...,64,64,64。 我想删除数组中第四部分为'empty'的项目。
我想要输出如下:
[“温度/ 1 /休闲/ 66,66,66,66,66,66,66,66,64,64,64,64 ...,64,64,64,64,64,64 ,64" , “温度/ 2 /休闲/空”, “温度/ 3 /休闲/空”]
我试图拆分数组项目:
for(i=0;i<arr.length;i++){
stringType = message.split('/')[0];
day = message.split('/')[1] ; //day
room = message.split('/')[2] ;
settingData = message.split('/')[3] ;
}
请帮我比较项目并从数组中删除。
答案 0 :(得分:0)
您可以使用此代码。它完美地满足您的需求
defmodule User do
defstruct name: nil, errors: %{}
def new(opts) do
__struct__(__MODULE__, opts) |> validate
end
defp validate(user) do
if !user.name, do: add_error(user, :name, "Name is required"), else: user
end
defp add_error(user, property, message) do
%User{user | errors: Map.put(user.errors, property, message }
end
def valid?(user) do
Enum.empty?(user.errors)
end
end
您可以看到 ClientScriptManager cs = Page.ClientScript;
StringBuilder csText = new StringBuilder();
csText.Append("<script type=\"text/javascript\"> ");
csText.Append("result1=Add(x,y);");
csText.Append("result2=Add(result1,b);");
csText.Append("</script>");
cs.RegisterClientScriptBlock(csType, csName, csText.ToString());
数组是var resultData = ["temp/1/Lounge/empty", "temp/1/Lounge/66,66,66,66,66,66,66,66,64,64,64,64…,64,64,64,64,64,64,64", "temp/2/Lounge/empty","temp/3/Lounge/empty"];
var data = resultData;
for(var i=0; i<data.length; i++){
var iItem = data[i];
var iFirst = iItem.substring(0, iItem.lastIndexOf("/") + 1);
var iLast = iItem.substring(iItem.lastIndexOf("/") + 1, iItem.length);
for(j=i+1 ; j<data.length; j++){
var jItem = data[j];
var jFirst = jItem.substring(0, jItem.lastIndexOf("/") + 1);
var jLast = jItem.substring(jItem.lastIndexOf("/") + 1, jItem.length);
if(iFirst === jFirst && iLast==='empty'){
resultData.splice(i,1);
}
}
}
console.log(resultData);
数组的精确副本,以便在从中拼接元素时保持正确的循环。为了进一步解决并尝试长数组值,这里是工作JSFIDDLE
答案 1 :(得分:0)
您可以按照以下方式执行此操作:
function splitValue(value, ignoreCase) {
let split = value.split('/'),
key = split.slice(0, 3).join('/'),
val = split.slice(3).join('/');
if (ignoreCase) {
key = key.toLowerCase();
}
return [key, val];
}
function filter(arr, ignoreCase = false) {
var byKey = {};
for (let value of arr) {
let [key, val] = splitValue(value, ignoreCase);
if (!byKey.hasOwnProperty(key)) {
byKey[key] = [];
}
if (val !== 'empty') {
byKey[key].push(val);
}
}
return arr.filter((value) => {
let [key, val] = splitValue(value, ignoreCase);
return (val !== 'empty' || byKey[key].length === 0);
});
}
console.log(filter([
"temp/1/Lounge/empty",
"temp/1/Lounge/something",
"temp/2/Lounge/empty",
"temp/3/Lounge/empty"]));
console.log(filter([
"temp/1/Lounge/something",
"temp/3/kitchen/something",
"temp/1/Lounge/empty",
"temp/3/Kitchen/empty"]));
console.log(filter([
"temp/1/Lounge/something",
"temp/3/kitchen/something",
"temp/1/Lounge/empty",
"temp/3/Kitchen/empty"], true));
&#13;
.as-console-wrapper {
max-height: 100% !important;
}
&#13;
我还在上面的示例中演示了如何忽略字母大小写,以便temp/3/kitchen/...
和temp/3/Kitchen/...
被视为属于同一组。